IO - CSAPP C10

计算机除了计算功能还有一个重要的功能就是与各种外设进行“交流”,从硬盘读取内容,从网络下载数据,向喇叭发送电流,计算机的前人们把这个过程进行了抽象,统一的UNIX中称之为IO操作,把所有的I/O设备都模型化为文件,对于所有的输入输出都在此抽象基础上变成对于文件的读和写,那么对于Linux内核就变成了一个简单、底层地的应用接口,使得所有IO以一种统一的方式来操作

  • 打开文件,内核返回一个非负整数的文件描述符,通过对此文件描述符对文件进行所有操作。

  • Linux shell创建的每个进程开始时都有三个打开的文件:标准输入(文件描述符0)、标准输出(1),标准出错(2)。头文件定义了常量STDIN_FILENO、STDOUT_FILENO、STDERR_FILENO,他们可用来代替显式的描述符值

  • 改变当前的文件位置,文件开始位置为文件偏移量,应用程序通过seek操作,可设置文件的当前位置为k。

  • 读写文件,读操作:从文件复制n个字节到内存,从当前文件位置k开始,然后将k增加到k+n;写操作:从内存复制n个字节到文件,当前文件位置为k,然后更新k

  • 关闭文件。当应用完成对文件的访问后,通知内核关闭这个文件。内核会释放文件打开时创建的数据结构,将描述符恢复到描述符池中。

对于存储的数据,Linux系统中也以“文件”来抽象

  • 普通文件包含任意数据,应用程序常区分文本文件和二进制文件,文本文件是只含ASCII或Unicode字符的普通文件,二进制文件是所有其他的文件。对内核而言,文本文件和二进制文件没区别

  • 目录是包含一组链接的文件。其中每个链接都将一个文件名映射到一个文件,这个文件也可能是一个另一个目录。每个目录至少含有两个条目:“.”是到该目录自身的链接,“..”是到父目录的链接

  • 套接字是用来与另一个进程进行跨网络通信的文件。

你可能感兴趣的:(IO - CSAPP C10)