1.send,write的区别 | recv,read的区别
send,recv除了发送数据之外,还可以指定一些特殊的选项,比如带外数据OOB。
对于send函数,需要知道的是如果开启了OOB选项的话,只是在TCP头部里面设置了URG位和URG指针,而且也只能读取一个字节而已...
对于recv函数,如果开启了MSG_PEEK以及MSG_DONTWAIT,不会向read函数一样读取后就清除缓冲区的内容。
2.readv,writev函数
readv,writev可以一次性将保存在多个缓冲区的数据一并发送,减少I/O函数的调用次数。
形象的比较write和writev的区别:
3.标准I/O
使用标准I/O的好处:
(1)良好的移植性,所以的操作系统都提供相同的标准I/O
(2)可以利用缓冲提高性能,这个与TCP接收缓冲,发送缓冲不一样。
这两种缓冲的作用是不一样的。标准I/O的缓冲主要是为了提升性能,而TCP的缓冲是为了支持TCP协议。
使用缓冲为什么能够带来性能的提升呢?
比较使用标准I/O的fgets,fputs和系统调用的read,write之间的性能差异。
可以看到使用标准I/O比较快,因为是放在一个缓冲区,然后一次性的写入到网络中,相当于调用系统调用次数减少了。
当然标准I.O也存在一些缺点:
涉及的函数有:
fdopen:将文件描述符转换为标准I/O的File
fgets,fputs,feof