Linux:基础IO

在这里插入图片描述
文件=文件内容+文件属性
文件操作=文件内容操作+文件属性操作

代码变成进程,调用f系列函数操作文件
当前路径:当前进程的工作路径,进程启动后,自己的路径会被保存在PCB中
向文件写入数据,最终是向磁盘写入,磁盘是硬件,只能通过操作系统提供的函数去访问硬件
位图,通过传标志位,执行不同的功能,每一位代表一个功能
在这里插入图片描述

C语言中的文件操作接口:

fopen:

打开文件没有带路径,默认在当前路径下形成

在这里插入图片描述
w打开文件,会先将文件清空,再写入

fread:

在这里插入图片描述

fwrite:

在这里插入图片描述

fseek:移动文件流指针指向的位置

在这里插入图片描述

whence的三个常用取值

SEEK_SET定义文件流指针到文件头部
SEEK_CUR定义文件流指针到当前位置
SEEK_END定义文件流指针到文件末尾

fclose:

fclose(FILE* stream)

在这里插入图片描述
现象:屏幕上什么都没有输出

原因:当前文件流指针指向了文件末尾

  • 刚开始写文件调用fwrite,文件流指针指向文件头部;
  • 写完 “i am biter\0” 后,此时文件流指针指向当前文件的末尾位置;
  • 调用fread读取时,是从文件末尾读取的,所以读不到任何内容;
    所以在读取前要使用fseek函数重置文件流指针位置

系统调用的文件操作接口:

C语言中,以w方式打开文件,文件会被清空
在这里插入图片描述

open:

在这里插入图片描述

必选项:下列三种方式必须有且只有一个

O_RDONLYread只读
O_WRONLYwrite只写
O_RDWRread write读写

可选项:

O_TRUNC截断(清空)文件
O_CREAT文件不存在则创建
O_APPEND追加方式
O_EXECL与CREAT搭配使用

这两个选项各自自由组合,就形成类似C语言中的w,r,a等选项

使用:

  • O_ECLE | O_CREAT;
    如果文件存在则打开失败,就是不想重新创建文件
  • 可选项和必选项组合使用,用按位或 | 方式组合
    (本质上内核使用位图的方式来表示每一种方式的,后面说)

例:

  • O_RDWR | O_CREAT | O_APPEND
  • 打开文件可读可写,文件不存在则创建,文件存在则追加

打开文件前,最好更新一下umask的值,然后设置文件权限

read:

返回值是ssize_t
在这里插入图片描述

write:

在这里插入图片描述

lseek:

在这里插入图片描述

close:

close(int fd); 关闭文件描述符
在这里插入图片描述

使用ll/proc/进程号/fd命令查看进程打开的文件信息,打印出文件描述符的值是3

  1. 命令行启动一个可执行程序时,会默认打开三个文件描述符;
  2. 这三个文件描述符分别对应标准输入,标准输出,标准错误(可以理解为运行该程序需要的文件);
  3. 0:标准输入
    1:标准输出
    2:标准错误
    3:默认新打开文件的文件描述符

为什么在读操作时要-1:
-1是预留\0的位置,防止访问越界;

  • buf里有1024个字节的空间,然后每次从文件中去读1023个字节;
  • 如果该文件中有大量文件读取,我们每次取1024个字节到数组中去放入数组;此前所有操作都没有问题;
  • 但是字符串需要\0结束,不然read函数会一种读取直到遇见\0停止,所以要预留一个空间防止越界访问
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值