如何强制文件描述符缓冲我的输出

时间:2018-07-23 16:17:23

标签: c++ linux io file-descriptor

许多人希望关闭其文件描述符上的缓冲。我要相反:我故意要配置一个文件描述符,以便在写入磁盘之前缓冲1K数据。

原因是我正在为C ++类的“冲洗”功能编写单元测试。为了测试它是否正常工作,我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增加。但是实际上,在我进行第一个文件大小检查时,数据已经被写入。

请注意,我在这里使用的是原始文件描述符,而不是流或其他任何内容。

这在Linux上是重要的。

1 个答案:

答案 0 :(得分:2)

  

如何强制文件描述符缓冲我的输出

如果您使用的是the POSIX write()(或其变体),则不能

write()调用必须具有以下行为:

  

对常规文件的write()成功返回后:

     
      
  • 通过该写操作修改的文件中每个字节位置的成功read()都应返回由   write(),直到该字节位置再次出现为止   修改。

  •   
  • 任何随后成功write()成功执行到文件中相同字节位置的操作,都将覆盖该文件数据。

  •   

这些要求意味着写入的数据对于系统上的任何其他进程可见,并且要保持一致,如果写入的数据导致文件大小增加,则内核报告的文件大小必须反映写入的数据。

  

我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增大。

对于write(),这基本上无效。文件大小将随着写入的数据而增加-write()不会缓冲数据。

如果要执行此操作,则必须实现自己的文件系统-与POSIX不兼容的文件系统。