当 readv() 时候,需要程序自己提供space,接收数据。
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/uio.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> #include <unistd.h> int main() { int ret; int fd; char str0[6]; char str1[15]; struct iovec iov[2]; fd = open("./tmp", O_RDWR); if (fd < 0) { perror("open"); return -1; } #if 0 read(fd, str0, sizeof(str0)); printf("%s\n", str0); close(fd); return 0; #endif memset(str0, 0, sizeof(str0)); memset(str1, 0, sizeof(str1)); iov[0].iov_base = str0; iov[0].iov_len = sizeof(str0); iov[1].iov_base = str1; iov[1].iov_len = sizeof(str1); ret = readv(fd, iov, 2); if (ret < 0) { perror("readv"); close(fd); return -1; } sleep(1); printf("...%s\n", str0); printf("...%s\n", str1); sleep(1); ret = writev(STDOUT_FILENO, iov, 2); if (ret < 0) { perror("writev"); close(fd); return -1; } close(fd); return 0; }
原文:https://www.cnblogs.com/rivsidn/p/10554297.html