调用writev后缓冲区总是刷新

时间:2014-08-12 11:23:18

标签: c file file-io buffer

我打开并使用如下文件:

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会向我显示新记录。我确切地说,最后iovecLF字符(但是,流不是行缓冲的)。

我查了一下:

  • 调用writev后文件未关闭。
  • 流已完全缓冲(对setvbuf的调用成功,对__flbf的调用返回0)。
  • fflush之后没有writev的电话。

谢谢,Mickael

0 个答案:

没有答案