目录
一、预备知识
二、C语言中的文件接口
三、系统调用中的文件接口
一、预备知识
首先我们要明确的一个观点是 --- 文件 = 内容 + 属性。而且我们之前也还将过一个概念,那就是Linux下一切皆文件。
内容是数据,属性也是数据 --- 那么也就是说我们的存储文件必须既要存储内容,又需要存储属性数据(默认是磁盘上的文件)。当我们想要访问一个文件时,首先肯定是要将这个文件打开,打开后将其加载到内存当中,而加载磁盘上的文件,就一定会需要访问磁盘,那么这样的工作是谁来做呢 --- 肯定是我们的操作系统来做的。还有一个问题是,我们只能打开一个文件吗,一个进程可以打开多个文件吗 --- 答案是,肯定是可以的。也就是说操作系统在运行中,可能会打开很多个文件! --- 操作系统需要管理打开的文件 --- 先描述在组织 --- 那么一个文件要打开,一定要现在内核中形成被打开的文件对象。
二、C语言中的文件接口
首先我们要知道的是一个C/C++程序在跑起来的时候,会默认打开三个文件:
stdin : 标准输入 stdout :标准输出 stderr :标准错误
为什么需要默认打开这三个文件呢? --- 主要是为了让程序员默认进行输入输出代码的编写。
C语言中操作文件的接口:
打开文件:fopen();
关闭文件:fclose();
读取文件:fscanf() ,fgets() ,fread();
写文件:fprintf() ,fputs() ,fwrite();
这里给大家写段代码回忆一下:
文件w打开方式,会清空原来内容 (如:echo > 输出重定向)
文件a打开方式,从文件结尾开始写,追加(如:echo >> 追加重定向)
三、系统调用中的文件接口
对于操作文件的系统调用接口主要有四个:
open:打开文件
close:关闭文件
read:读取文件
write:向文件中写入
先来看看open:
首先先来讲一讲每个参数的意义:
pathname : 表示要打开文件的路径和文件名
flags:表示打开文件的方式,这里的 flags 采取位图的方式,一次性来标志多个位置,根据各个位置的值,来判断,打开文件的方式。下面介绍几个:
O_RDONLY: 只读打开
O_WRONLY: 只写打开
O_RDWR : 读,写打开这三个常量,必须指定一个且只能指定一个
O_CREAT : 若文件不存在,则创建它。需要使用mode选项,来指明新文件的访问权限O_APPEND: 追加写
mode:若是文件不存在,要创建时,表示以什么权限创建(8进制表示),当然这里创建文件同样也是会收到权限掩码的影响的。
返回值为 int:是一个文件描述符 fd(等会说)
这里写段代码体会一下:
close接口:
这个接口就比较简单,主要就是起到一个关闭文件的一个功能
read接口:
首先 fd:文件描述符,表示向哪个文件中进行写入
buf:将读取到的内容放入buf中。
count:表明要读取的长度。
返回值:读取成功返回读取到字节数。
write接口:
和read的含义差不多,只是反过来了。
接下来写一段代码,让我们试试这几个系统调用接口:
读取: