Linux-基础IO-c语言的文件操作接口-系统调用文件接口-文件描述符&文件流指针

1. 回忆c语言的文件操作接口

1.1 fopen

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

  path:带路径的文件名称(待打开的文件)
  mode:
    r:以可读方式打开,文件不存在则报错
    r+:以可读方式打开,不可写,文件不存在,则报错
    w以可写方式打开,但是不能读,文件不存在则创建,文件存在则截断(清空文件内容)文件。
    w+:以读写方式打开,文件不存在,则创建,文件存在,则截断(清空文件内容)文件。
    a:追加写,不能读,在文件末尾进行追加写,文件不存在则创建文件。文件存在,则在文件的末尾开始写。
    a+:可读追加写,不能读。在文件末尾进行追加写,文件不存在则创建文件,文件存在,则在文件的末尾开始写。
  返回值:文件流指针FILE

1.2 fclose

int fclose(FILE *fp);

  关闭文件流指针

1.3 fread

size_t fread(void *ptr, size_t size, size_t nmemb, FILE *stream);

  ptr:要将文件读到的保存到哪里去,ptr保存用户准备的一个空间(缓冲区)的地址。
  size:块的大小,单位是字节
  nmemb:块的个数
    eg:size = 2 nmemb = 5 ==>10
    常见的用法:size = 1,nmemb可以指定任意块,读到的字节数量也就是可以用nmemb表示了
    stream:文件流指针,表示要从哪里进行读
  返回值:返回的是读到的块的个数

1.4 fwrite

size_t fwrite(const void *ptr, size_t size, size_t nmemb,FILE *stream);

  ptr:要写入到文件当中的内容
  size:块的大小,单位字节
  nmemb:块的个数
    总写入的字节数量 = 块的大小 * 块的个数
  stream:文件流指针
  返回值:写入块的个数

1.5 fseek

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

  stream:文件流指针
  offset:偏移量,单位字节。相当于whence而言的偏移量
  whence:
    SEEK_SET:文件的头部
    SEEK_CUR:当前文件流指针的位置
    SEEK_END:文件的尾部

2. 系统调用文件接口

2.1 open

在这里插入图片描述

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

pathname:待打开的文件
flags:
  O_RDONLY:只读方式
  O_WRONLY:只写方式
  O_RDWR:读写方式
  上面这三个有且只有一个,相互是互斥的
  O_CREAT:文件不存在则创建,需要告知权限,使用8进制数字表示
  O_TRUNC:截断文件(清空文件)
  O_APPEND:追加
  上面这三个可以组合使用,组合使用的方式为:按位或
    eg:O_WRONLY|O_CREAT|O_TRUNC
  返回值:
    返回一个正整数,含义为文件描述符

1.为什么需要按位或?
#define O_RDONLY 00000000
#define O_CREAT 00000100
#define O_RDWR 00000002
  上面的均为8进制数字,这些属性按照位图的方式来进行使用,如果想要某一个属性,则使用按位与的方式,将对应的比特位设置为1;

fcntl函数:获取文件描述符的属性
在这里插入图片描述

  fcntl(fd,F_GETFL);
属性通过返回值返回
2.文件描述符是啥?
在这里插入图片描述
  默认打开的标准输入,标准输出,标准错误,文件描述符本质上就是一个小整数。

2.2 close

close(int fd)

2.3 read

在这里插入图片描述
  fd:文件描述符
  buf:将读到的内容放到buf这个缓冲区当中
  count:表示最大能够读多少字节,和buf的大小有关系,需要在buf当中预留一个\0的位置。
返回值:
  >0: 读到的字节数量
  - 1:读失败了

2.4 write

在这里插入图片描述
  fd:文件描述符
  buf:写到文件当中的内容
  count:写入的字节数量
返回值
  >0:表示写入文件真实的字节数量
  -1:写入失败了

2.5 lseek

在这里插入图片描述
  fd:文件描述符
  offset:偏移量
whence:
  SEEK_SET
  SEEK_CUR
  SEEK_END

3. 文件描述符&文件流指针

在这里插入图片描述
  文件描述符就是内核当中fd_array数组的下标,是一个正整数
文件描述符的分配规则:
  最小位占用原则
一个进程最大可以打开多少个文件描述符?
命令:ulimit -a
在这里插入图片描述
更改:ulimit -n

  • 7
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天津 唐秙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值