基础I/O接口与操作

C语言中的文件接口

1 打开文件

  FILE * fopen(const char * path,const char * mode)

  参数:path:文件路径  mode:打开文件的方式

  返回值:成功返回一个文件流指针,失败返回NULL

  举例:打开当前目录下的myfile文件,以只读方式打开

    FILE* fd = fopen("myfile", "r");

  mode的方式:可以得到:

    通过man fopenke

2 关闭文件,释放文件流指针

  int fclose(FILE* fp);

  参数:fp:需要关闭的文件流指针

  返回值:成功返回0,失败返回EOF

  举例:关闭之前的fd文件流指针

    fclose(fd)

3 读文件

  size_t fread(void* readBuff,size_t size,  size_t count, FILE* fp);

  参数:readBuff:用于接收数据的内存地址  size:一次读几个字节  count:读几次  fp:已经打开的文件流指针

  返回值:成功返回读取的字节个数(一般情况下=count*size,有时也会发生读到的个数<count*size的情况),不成功读到文件的末尾,返回0

  举例:将之前的fd中的内容读到buff中:size_t readsize = fread(buff, 1, 1024, fd);

4 写文件

  size_t fwrite(const void* buff, size_t size, size_t count, FILE* ostream);

  参数:buff:一个存放数据的地址,该地址中的内容将要被写入ostream文件流指针所打开的文件里  size:一次要写的字节数  count:需要写几次

  返回值:成功返回写的字节数

5 查看文件指针是否到达文件末尾

  int feof(FILE* fp);

  参数:fp:文件流指针

  返回值:到达结尾返回非零值,未到达返回0

 6 设置文件流指针的位置

  int fseek(FILE* stream, long offset, int whence);

  参数:stream:文件流指针  offset:相对于whence的偏移值    whence:通常设置为三个值(SEEK_CUR(当前位置)、SEEK_END(文件末尾)、SEEK_SET(文件开始))

  返回值:成功返回0,失败返回非零

7 文件流指针相对于文件开始的偏移字节数

  long ftell(FILE* fp);

  返回值:成功返回偏移的字节 数失败返回-1

系统文件I/O

1 打开文件

  int open(const char *pathname, int flags);

  int open(const char *pathname, int flags, mode_t mode);

  参数:pathname:文件路径    mode:打开方式(如下第二张图)  flags:函数选项(可以是用 ' | ' 传递多个选项实现不同功能)

  常用的打开文件选项:

    O_RDONLY(只读方式打开)  O_WRONLY(只写方式打开)  O_RDWR(读写方式打开)  

2 关闭文件

  int close(int fd);

  参数:传入文件描述符即可,切记操作完成之后关闭文件描述符,防止内存泄漏

3 读文件

  ssize_t read(int fd, void* buff, size_t count);

  参数:fd:文件描述符  buff:将读到的内容存到buff中  count表示要读几个字节

4 写文件

  ssize_t write(int fd, void* buf, size_t count)

  参数:fd:文件描述符  buf:将buf中的数据写到文件中  count:要写的文件的字节数

注意系统函数和系统调用的关系一目了然,可以认为f系列函数是对系统调用的封装,方便二次开发

文件描述符

1 linux进程在默认情况下会打开三个文件描述符,分别是0,1,2;它们分别代表标准输入,标准输出,标准错误

2 当我们打开文件时,操作系统要在内存中创建相应的数据结构来描述目标文件,于是就有了files_struct结构体,表示一个已经打开的文件对象。而进程在执行open系统调用,

所以会放让进程和文件关联起来,每个进程pcb都有一个*files指针,指向files_struct结构体中的一个数组,该数组的下标就是文件描述符,每一个元素都是指向打开文件的指针。

3 文件描述符的分派规则

  在files_struct中,找到当前没有被使用的最小的小标作为新打开文件的文件描述符;例如,当手动关闭标准错误文件描述符时,当再新建一个文件的时候,新文件的文件描述符就为3;

    

猜你喜欢

转载自www.cnblogs.com/love-you1314/p/10461898.html