我打开并使用如下文件:
stream = fopen(fd, "a");
setvbuf(stream, NULL, _IOFBF, BUFSIZ);
...
do {
l = writev(fileno(f), iov, n);
//The last iovec is the LF character
} while (l < 0 && errno == EINTR);
为清楚起见,省略了错误检查代码。
为什么在每次调用writev
后刷新输出缓冲区?在每次调用ls
后,在文件所在的目录中执行writev
会显示更大的尺寸。每次调用cat
后对文件执行writev
会向我显示新记录。我确切地说,最后iovec
是LF
字符(但是,流不是行缓冲的)。
我查了一下:
writev
后文件未关闭。setvbuf
的调用成功,对__flbf
的调用返回0)。fflush
之后没有writev
的电话。谢谢,Mickael