Linux下对文件的操作

目录

open接口

错误示例:

close接口

write接口

打开前清空文件内容

追加方式打开文件

read 接口

为什么 open 接口返回的值是 3?

那么0、1、2是什么呢?---标准IO

验证0

验证1、2

进程和文件硬件的联系


open接口

打开文件的接口,第一个参数是文件名

第二个参数是宏,系统中用宏来控制这个文件的打开方式(只读、只写、读写)

O_CREAT 文件不存在就创建文件

O_APPEND 追加式写入内容

O_RDONLY 只读

O_WRONLY 只写

O_TRUNC 打开前清空文件

可以传多个宏,用 | 链接

底层用位图实现,一个位为1代表不同的功能

第三个参数是关于权限的;

错误示例:

不能用两个参数的 open 接口来打开一个不存在的文件,没有设置权限,该文件的权限会出现乱码的形式:

当我们打开一个不存在的文件时,需要用到三个参数的接口:

此时的权限是 664 ,并没有按照的给定的标准666来,这是因为权限掩码 0002 的影响,一般的为例权限按照我们的要求来,是需要将掩码设为 0 :

close接口

关闭打开的文件

write接口

向文件中写入内容

第一个参数为 打开文件返回的整型,第二个参数是插入文件内容的起始地址,第三个内容是插入内容的大小:

打开前清空文件内容

C语言中,以w方式打开的文件,在重新写入时,会清空源文件的内容,而 write 接口时在原内容的基础上覆盖式写入:

要使文件写入前将文件内容清空,在open接口上 调用宏 O_TRUNC

追加方式打开文件

调用open时,添加宏 O_APPEND,写入新内容时不会清空文件,直接在已有内容后写入新内容

read 接口

第一个参数是打开文件的返回整形,第二个参数是要将文件内容读入的缓冲区,第三个参数是读入缓冲区的大小

为什么 open 接口返回的值是 3?

多创建几个文件,看看返回值是否一致:

那么0、1、2是什么呢?---标准IO

返回的整数叫做文件描述符,以前 C 语言中 FILE* 指针指向的是一个结构体,里面一定包含了文件描述符来区分文件。

C语言文件操作函数是封装了系统调用的,其返回值 FILE* 结构体也是封装了系统的文件描述符fd的,一一对应的关系。

0:标准输入,键盘

1:标准输出,显示器

2:标准错误,显示器 

验证0

默认标准输入键盘是打开的,运行程序后直接输入,观察打印出的值

验证1、2

默认标准输出显示器是打开的,直接打印在显示屏上

默认标准错误显示器是打开的,直接打印在显示屏上

 再看看C中标准输入输出和错误中的文件描述符:

进程和文件硬件的联系

返回值0、1、2、3、4……这些其实是数组下标:

在进程打开多个文件时,遵守先描述--再组织的原则:创建指向起始文件的指针,为了方便管理,采用链表形式将文件信息组成的结构体相连,这些结构体包含了各个文件的内核数据结构。

创建PCB,PCB中存储了指向文件结构体的起始指针指针指向的是一个指针数组,指针数组中存储的就是各个文件的结构体指针,这样文件就跟进程联系到了一起

Linux下一切皆文件,我们通过验证,发现0、1这样的下标代表的是硬件也可以传入系统调用接口中,这就很好的反映了这句话。

那么底层是如何实现的:

先描述在组织,描述时内核创建包含文件信息的结构体,结构体中也含有各种函数指针,指针指向的是调用各个硬件的方法,相当于描述创建的结构体封装了硬件调用的接口,这样就将进程和硬件连接在了一起。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

今年依旧去年春

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

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

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

打赏作者

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

抵扣说明:

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

余额充值