许多人希望关闭其文件描述符上的缓冲。我要相反:我故意要配置一个文件描述符,以便在写入磁盘之前缓冲1K数据。
原因是我正在为C ++类的“冲洗”功能编写单元测试。为了测试它是否正常工作,我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增加。但是实际上,在我进行第一个文件大小检查时,数据已经被写入。
请注意,我在这里使用的是原始文件描述符,而不是流或其他任何内容。
这在Linux上是重要的。
答案 0 :(得分:2)
如何强制文件描述符缓冲我的输出
如果您使用的是the POSIX write()
(或其变体),则不能。
write()
调用必须具有以下行为:
对常规文件的
write()
成功返回后:
通过该写操作修改的文件中每个字节位置的成功
read()
都应返回由write()
,直到该字节位置再次出现为止 修改。任何随后成功
write()
成功执行到文件中相同字节位置的操作,都将覆盖该文件数据。
这些要求意味着写入的数据对于系统上的任何其他进程可见,并且要保持一致,如果写入的数据导致文件大小增加,则内核报告的文件大小必须反映写入的数据。
我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增大。
对于write()
,这基本上无效。文件大小将随着写入的数据而增加-write()
不会缓冲数据。
如果要执行此操作,则必须实现自己的文件系统-与POSIX不兼容的文件系统。