> 技术文档 > 系统编程——文件IO

系统编程——文件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:当前运行的程序有多少个