首先介绍了创建文件描述符的两个函数:
pipe 和 dup
pipe创建一个管道,管道一端写一端读。
管道的内存容量有限,如果管道满了,写操作将阻塞,如果管道空了,读操作将阻塞。
当没有进程向管道写数据时,read操作将返回0,当没有进程向管道读数据时,write操作将触发SIGPIPE信号。
sockpair创建一个双向管道。
dup用来复制一个文件描述符,会选择当前最小的文件描述符作为当前文件描述符的复制。
dup可以用来实现对终端的输出,因为终端的标准文件描述符值为1,将其关闭,再复制一个文件描述符,即可将终端的输入输出与该文件描述符联系起来。
值得注意,dup复制的文件描述符不继承原有的文件描述符属性。
接下来是读写的一些函数:
writev/readv
分散读和分散写,可以从多个内存中读写数据,不用将其合并之后再发送,省去了合并操作,减少内存开销。
sendfile
专门用于网络通信的一个函数,用于在两个文件描述符之间零拷贝传递数据。
其中输入的文件描述符必须为一个有实际值的文件描述符,不能是管道和套接字,输出的文件描述符必须是socket。
mmap和munmap
生成一段共享内存用于进程通信,具体操作在十三章看了再说。
slipce
在两个文件描述符间零拷贝传递数据。
值得注意的是,其中输入和输出必须有一个是管道。
tee
在两个管道文件描述符间零拷贝复制数据。
fcntl
专门用于操作文件描述符属性的函数。在这本书中最常用的操作就是将文件描述符设置为非阻塞的。