linux高级IO
背景:
write/writev
write函数把内存中的数据写入文件描述符,通常这些数据是内存中的连续区域,如果我们应用程序需要把内存中多个非连续区域的数据写入文件描述符,那么需要多次调用write函数,如果文件描述符是socket,那么需要发送多个数据包。这种情况下,write函数效率比较低。
writev将多个数据存储在一起,将驻留在两个或更多的不连接的缓冲区中的数据一次写出去。
unlink
writev函数声明:
#include <sys/uio.h>
ssize_t writev( int fd, const struct iovec *iov, int cnt );
iov是一组iovec结构的指针,iovec结构如下:
struct iovec {
char *iov_base; /*基本地址指针,指向缓冲区*/
size_t iov_len; /*指定缓冲区长度*/
};
readv函数将数据读入内存中多个不连续缓冲区.
unlink:
该函数删除一个文件或者管道或者设备,但并不删除文件的内容,只是把文件从文件所在的目录移除,如果此时进程打开该文件,那么依旧可以对文件进行读写操作。