很多人都希望关闭文件描述符的缓冲。我想要相反的结果:我有意配置一个文件描述符,在写入磁盘之前缓冲1K的数据。
原因是我正在为C++类的"flush"函数编写一个单元测试。为了测试它是否工作,我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增长。但在实践中,当我进行第一次文件大小检查时,数据已经写入。
请注意,我在这里使用的是原始文件描述符,而不是流或任何东西。
如果这很重要的话,这是在linux上。
如何强制文件描述符缓冲我的输出
如果使用POSIXwrite()
(或其变体(,则不能。
write()
调用的行为必须如下:
在对常规文件的
write()
成功返回后:
文件中每个字节位置的任何成功
read()
,如果被该写入操作修改,则应返回write()
,直到这些字节位置再次修改。任何后续成功的
write()
到文件中的相同字节位置都将覆盖该文件数据。
这些要求意味着写入的数据对系统上的任何其他进程都是可见的,为了保持一致,如果写入的数据导致文件大小增加,内核报告的文件大小必须反映写入的数据。
我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增长。
从根本上来说,与write()
不起作用。文件大小将随着写入的数据而增长-write()
不缓冲数据。
如果你想让它做到这一点,你就必须实现你自己的文件系统——一个不符合POSIX的文件系统。