系统编程——文件IO
一、文件io
1.lseek : off_t lseek(int fd, off_t offset, int whence);
(1)功能:
定位光标的位置
(2)参数:
1)fd:文件描述符
2)offset:偏移量
正:向后偏移
负:向前偏移
零:不偏移
3)whence:
SEEK_SET
SEEK_CUR
SEEK_END
4)返回值:成功返回偏移量,失败返回-1
(3)注意:
1)不支持O_APPEND的追加模式,无法生成空洞文件。
2)lseek函数执行失败,文件指针还在偏移前的位置。
3)lseek函数在设备文件上偏移无效。
(4)阻塞:程序因为某种条件没有被触发,而导致'0' '\0'
(5)面试题:文件IO的文件描述符最大值是多少?
答:1024 个,范围0-1023
2.fileno
(1)FILE* fp -> int fd fgets(,);
int fileno(FILE *stream);
(2)功能:获得一个文件流指针中的文件描述符
(3)参数:stream:文件流指针
(4)返回值:成功返回文件描述符,失败返回-1
3.fdopen
(1) int fd -> FILE *fp
FILE *fdopen(int fd, const char *mode);
(2)功能:将文件描述符转化为文件流指针
(3)参数:
1)fd:已经打开的文件描述符
2)mode:
"r"
"r+"
"w"
"w+"
"a"
"a+"
(4) 返回值:成功返回文件流指针
失败返回NULL
二、文件目录操作
1.打开目录(opendir):DIR *opendir(const char *name);
(1)功能:打开一个目录获得一个目录流指针
(2)参数 : name:目录名
(3)返回值:成功返回目录流指针,失败返回NULL
2.读取目录(readdir):struct dirent *readdir(DIR *dirp);
(1)功能:从目录流中读取文件信息并将保存信息的结构体地址返回
(2)参数:dirp:目录流指针
(3)返回值:包含文件信息的结构体,出错或者读到目录流末尾返回NULL
3.关闭目录(closedir): int closedir(DIR *dirp);
(1)功能:关闭之前已经打开的目录流对象
(2)参数:opendir的返回结果中目录流对象
(3)返回值:成功 0,失败 -1
4.获取秒数
(1)time
time_t time(time_t *t);
time_t tm;
time(&tm)
tm = time(NULL);
1)功能:获得1970年到现在的秒数
2)参数:
1)t:存放秒数的空间首地址
2)返回值:成功返回1970年到现在的秒数,失败返回-1
2.localtime:struct tm *localtime(const time_t *timep);
(1)功能:将一个秒数转化成日历时间
(2)参数:timep:保存秒数空间的地址
(3)返回值:成功返回保存日历时间结构体的指针,失败返回NULL
4.文件类型:
top:当前运行的程序有多少个