第十章《系统级I/O》

Unix I/O

所有的I/O设备都被模型化为文件,因此所有的输入和输出操作都被当做对相应文件的读和写来执行,这种方式称为Unix I/O,其使得所有的输入和输出都能以一种统一且一致的方式来进行

文件

包含:

  • 普通文件:又分为文本文件二进制文件
  • 目录:包含一组链接的文件,其中每一个链接都将一个文件名映射到一个文件,这个文件还有可能是一个目录
  • 套接字:用来与另一个进程进行跨网络通信的文件

打开文件

通过open函数来打开一个已存在的文件或创建一个新的文件,包含以下几种方式:

  • O_RDONLY:只读
  • O_WRONLY:只写
  • O_RDWR:可读可写
  • O_CREAT:如果文件不存在,就创建它的一个截断文件
  • O_TRUNC:如果文件存在,就截断它
  • O_APPEND:在每次写操作前,设置文件的位置到文件的结尾

通过close函数关闭一个打开的文件

读写文件

通过read函数从描述符为fd的当前文件位置复制最多n个字节到内存位置buf,返回-1表示一个错误,而返回0表示EOF,否则返回值表示的是实际传送的字节数量

通过write函数从内存位置buf复制最多n个字符到描述符为fd的当前文件位置

共享文件

Linux内核用三个相关的数据结构来表示打开的文件:

  • 描述符表:每个进程都有它独立的描述符表,它的表项是由进程开发的文件描述来索引的
  • 文件表:打开文件的集合是由一张文件表来表示的,所有的进程共享这张表
  • v-node表:所有的进程都共享这张表,每个表项包含stat结构中的大部分信息

I/O 重定向

I/O 重定向操作符允许用户将磁盘文件和标准输入输出联系起来

在代码中可以使用dup2函数来实现

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、I/O 对于Unix系统来说,所有IO设备,如磁盘、鼠标键盘、网卡,一切皆文件。这样的一个好处就是对于任何东西...
    ShutLove阅读 233评论 0 0
  • 计算机系统漫游 代码从文本到可执行文件的过程(c语言示例):预处理阶段,处理 #inlcude , #defin...
    willdimagine阅读 3,638评论 0 5
  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 5,447评论 0 9
  • 结束了21天的训练营,这是教练给学员的建议 21天的训练营只是一个开始, 那么接下去我们应该怎么样去让成果,更好的...
    最会画画的健身教练Danni阅读 941评论 7 2
  • 【0217我在悦读】萧萧 第二次打卡 书名:《终身学习》 作者:罗振宇 篇目:第二章 活着就要升级 分享:001我...
    萧萧姐阅读 133评论 0 0