简述文件IO

简述文件IO系统调用IOIO效率进程表与文件表在LINUX/UNIX系统下,有着一切皆文件的定义,所谓IO就是指输入和输出,所有打开或新创建的文件,操作系统内核都会向进程返回一个文件描述符(FD),这个文件描述符0与进程的标准输入关联,1与标准输出关联,2与标准错误关联。系统调用IO系统调用文件IO有open、oepnat、creat、close、lseek、read、write,这里不对调用函数做过多的详解。IO效率IO的效率主要讲的是IO缓冲区的大小和CPU执行效率之间的关系,缓冲区BUFFE
摘要由CSDN通过智能技术生成


在LINUX/UNIX系统下,有着 一切皆文件的定义,所谓文件IO就是指文件的 输入输出

系统调用IO

系统调用文件IO有open、oepnat、creat、close、lseek、read、write,这里不对调用函数做过多的详解。

IO效率

IO的效率主要讲的是IO缓冲区的大小和CPU执行效率之间的关系,缓冲区BUFFER越小,调用系统函数read()和write()次数约多,从而CPU的消耗就越大,如果要对文件进行频繁的修改在内存中操作无疑是效率最高的选择,所以输入和输出都会先写进缓存,当缓存区满了之后在执行刷新把数据写入磁盘,系统调用函数sync函数fsync函数fdatasync函数可以直接刷新缓冲区把文件写入本地。

设备与文件IO

较新的系统都提供名为/dev/fd 的目录,其目录项是命名为0、1、2…n等的文件,打开文件/dev/fd/n等效于复制描述符n。

文件IO的数据结构

在这会对文件IO的数据结构进行详细讲解,我们通过文件描述符(FD) 找到对应的文件表,从文件表中找到v节点和i节点表,在通过i节点中的磁盘地址访问对应磁盘的储存。
下图是由两个文件描述符指向同一个文件的结构模型,在调用int dup(int fd)和int dup2(fd1,fd2)函数后会形成如下图结构,在这只看单文件的表示。在这里插入图片描述

进程表

在打开一个文件后,内核进程返回一个文件描述符(FD),这个文件描述符记录在进程表中,进程表中存放文件描述符(FD) 和一个指向文件表的指针。

  • 文件描述符(FD)
    对于内核而言,所有打开的文件都通过文件描述符引用,所有打开新创建的文件,操作系统内核都会向进程返回一个文件描述符(FD),这个文件描述符里0与进程的标准输入关联,1与标准输出关联,2与标准错误关联。

文件表

文件表中有文件状态标志(close_on_exec)当前文件的偏移量v节点指针,其中v节点指针指向v节点表

  • 文件状态标志(close_on_exec)
    文件描述符标志(close_on_exec)是一个标志位,当使用execl开启一个进程后,打开的进程需要用到主进程中打开的文件描述符就会用到该标志,文件状态标志(close_on_exec) 的主要作用是执行exec函数时,判断是否要关闭子进程对主进程文件描述符的访问权限,如果关闭了此权限,打开的进程无法访问主进程中打开的文件描述符,否则可以使用此文件描述符对文件进行读写。

测试程序 test.c

#include<apue.h>
#include<fcntl.h>

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值