Linux高性能服务器第六章高级IO总结

本文介绍了Linux系统中的文件描述符创建(pipe,dup),以及读写函数如writev/readv、sendfile、mmap/munmap、slipce和tee等,重点强调了它们在数据传输和进程间通信中的应用,包括fcntl用于操作文件描述符属性的用法。
摘要由CSDN通过智能技术生成

首先介绍了创建文件描述符的两个函数:

pipe 和 dup

pipe创建一个管道,管道一端写一端读。
管道的内存容量有限,如果管道满了,写操作将阻塞,如果管道空了,读操作将阻塞。
当没有进程向管道写数据时,read操作将返回0,当没有进程向管道读数据时,write操作将触发SIGPIPE信号。
sockpair创建一个双向管道。

dup用来复制一个文件描述符,会选择当前最小的文件描述符作为当前文件描述符的复制。
dup可以用来实现对终端的输出,因为终端的标准文件描述符值为1,将其关闭,再复制一个文件描述符,即可将终端的输入输出与该文件描述符联系起来。
值得注意,dup复制的文件描述符不继承原有的文件描述符属性。

接下来是读写的一些函数:

writev/readv
分散读和分散写,可以从多个内存中读写数据,不用将其合并之后再发送,省去了合并操作,减少内存开销。

sendfile
专门用于网络通信的一个函数,用于在两个文件描述符之间零拷贝传递数据。
其中输入的文件描述符必须为一个有实际值的文件描述符,不能是管道和套接字,输出的文件描述符必须是socket。

mmap和munmap
生成一段共享内存用于进程通信,具体操作在十三章看了再说。

slipce
在两个文件描述符间零拷贝传递数据。
值得注意的是,其中输入和输出必须有一个是管道。

tee
在两个管道文件描述符间零拷贝复制数据。

fcntl
专门用于操作文件描述符属性的函数。在这本书中最常用的操作就是将文件描述符设置为非阻塞的。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值