基础IO(文件与进程)
创始人
2024-09-25 07:52:22
0

一、文件与进程的关系

打开文件的本质是进程打开文件。

打开的文件在内存中,未打开的文件在磁盘中。

当进程打开多个文件,操作系统中有多个进程,那么操作系统中就必定会存在多个打开的文件。

为了管理文件就要先描述再组织。

文件存在于磁盘,所以向文件写数据就是向硬件写入,磁盘作为硬件我们用户无法绕过操作系统进行访问,所以操作系统就一定要向用户提供系统调用,而我们平时用的c / c++函数就是系统调用的封装。

二、系统调用的文件操作

1、打开文件

pathname:指明文件创建的路径和文件名。若没有路径默认创建在当前按路径。

flags:选项,类似于c语言中 w, a等打开方式。

mode:设置文件权限,与之前Linux下的文件权限一样。

补充

系统调用函数 umask() 可以设置当前进程中的权限掩码。

flag选项

(1)O_WRONLY       只写打开

(2)O_CREATE        文件不存在就创建,要mode指明文件权限

(3)O_RDONLY        只读打开

(4)O_RDRW            读写打开

(5)O_APPEND        追加打开

(6)O_TRUNC          清空文件

2、写文件

fd:open() 函数的返回值,表示文件描述符。

buf:要插入的文件内容。

count:内容大小。

 3、关闭文件

4、举例

一开始 log.txt 文件不存在,只读打开并创建文件。

现在文件存在并且内容是 hello,此时我们再次只读打开写入a

我们发现结果是覆盖文件内容,这次我们再加上清空文件,写入a

最后文件内只有a,其实我们就能发现c语言中'w'方式打开文件,就是上面三个选项全带的功能,所以一开始说 c / c++ 文件函数就是封装的系统调用。

三、文件描述符与文件的先描述再组织

1、文件描述符介绍

我们上面提到 open 函数会返回一个文件描述符,其实每一个进程的开始,我们自己创建的文件描述符是从3开始,0 1 2 分别对应的是标准输入(键盘),标准输出(显示器),标准错误(显示器),这三个文件是进程运行时自动创建的。

那为什么函数传一个数字 fd 进程就能打开对应文件写入或关闭呢?

上图中我们就能知道其实返回的 fd 就是内核中进程 : 文件映射关系的数组下标。

2、open函数作用

(1)常见 file 内核数据结构。

(2)开辟文件缓冲区,加载文件数据。

(3)查看文件描述符表。

(4)file 地址填入文件描述符表。

(5)返回 fd 文件描述符。

四、理解一切皆文件

我们知道c语言中结构体是不能有函数的,但是上图中操作系统层面的文件结构体存放函数指针,以此来调用函数,就相当于c++中的类。

由于对应不同的硬件,调用方式不同,在操作系统层面每一个文件结构体函数名都是 read, write....,但是在驱动层实现函数时是截然不同的,这就像是c++中的多态。

上图的一整套逻辑就是 vfs(virtual file system 虚拟文件系统)

结论就是上层访问不同硬件调用函数名相同的函数。

五、理解语言中的文件函数和系统调用函数的联系

系统调用中函数 open 返回 fd,类比c语言就是类型是 FILE* 的指针(本质是结构体)。

所有c语言上的文件操作函数,本质底层都是系统调用的封装。

为什么要封装系统调用?

不同的系统,系统调用不同,导致用系统调用代码不具备跨平台性。

所以在写语言的源代码时要把所有常见平台中的文件系统调用封装,在哪个平台就下载哪个平台的c标准库。

相关内容

热门资讯

必备了解!微信海盗来了辅助工具... 必备了解!微信海盗来了辅助工具(辅助)中至上饶麻将原来真的是有辅助软件(哔哩哔哩);1、全新机制【微...
解密了解!决胜麻架胡易辅助(辅... 解密了解!决胜麻架胡易辅助(辅助)广水四色竟然有挂辅助平台(哔哩哔哩)1、完成决胜麻架胡易辅助辅助器...
解迷了解!星悦山东辅助(辅助)... 解迷了解!星悦山东辅助(辅助)粤麻圈一直是真的辅助脚本(哔哩哔哩)星悦山东辅助透视方法中分为三种模型...
科普了解!皇豪互众控制系统下载... 科普了解!皇豪互众控制系统下载(辅助)乐乐生活总是有挂辅助挂(哔哩哔哩)1、游戏颠覆性的策略玩法,独...
解谜了解!老k麻将辅助器(辅助... 解谜了解!老k麻将辅助器(辅助)乐山游戏中心一贯真的有辅助软件(哔哩哔哩)进入游戏-大厅左侧-新手福...
解迷了解!聚友联盟免费辅助器下... 解迷了解!聚友联盟免费辅助器下载(辅助)相约十五胡一贯是真的辅助安装(哔哩哔哩)1、玩家可以在聚友联...
总结了解!边锋嘉兴红十辅助(辅... 总结了解!边锋嘉兴红十辅助(辅助)中至九江麻将一贯是有辅助神器(哔哩哔哩)边锋嘉兴红十辅助透视方法中...
揭幕了解!全游大厅拼十辅助(辅... 揭幕了解!全游大厅拼十辅助(辅助)卡卡麻将原来有挂辅助神器(哔哩哔哩)1)全游大厅拼十辅助辅助插件:...
必备了解!四川微乐自建房辅助器... 必备了解!四川微乐自建房辅助器(辅助)卡贝大厅总是真的是有辅助插件(哔哩哔哩)四川微乐自建房辅助器透...
必备了解!天天微友辅助神器(辅... 必备了解!天天微友辅助神器(辅助)南宁老友麻将本来是有辅助安装(哔哩哔哩)1、许多玩家不知道天天微友...