如何强制文件描述符缓冲我的输出
How to force a file descriptor to buffer my output
很多人都希望关闭文件描述符的缓冲。我想要相反的结果:我有意配置一个文件描述符,在写入磁盘之前缓冲1K的数据。
原因是我正在为C++类的"flush"函数编写一个单元测试。为了测试它是否工作,我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增长。但在实践中,当我进行第一次文件大小检查时,数据已经写入。
请注意,我在这里使用的是原始文件描述符,而不是流或任何东西。
如果这很重要的话,这是在linux上。
如何强制文件描述符缓冲我的输出
如果使用POSIXwrite()
(或其变体(,则不能。
write()
调用的行为必须如下:
在对常规文件的
write()
成功返回后:
文件中每个字节位置的任何成功
read()
,如果被该写入操作修改,则应返回write()
,直到这些字节位置再次修改。任何后续成功的
write()
到文件中的相同字节位置都将覆盖该文件数据。
这些要求意味着写入的数据对系统上的任何其他进程都是可见的,为了保持一致,如果写入的数据导致文件大小增加,内核报告的文件大小必须反映写入的数据。
我想写一些数据,检查磁盘上文件的大小,然后刷新,然后检查大小是否增长。
从根本上来说,与write()
不起作用。文件大小将随着写入的数据而增长-write()
不缓冲数据。
如果你想让它做到这一点,你就必须实现你自己的文件系统——一个不符合POSIX的文件系统。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 我的字符计数代码计算错误.为什么
- 为什么我的C#代码在调用回C++COM直到Task时会暂停.等待/线程.加入
- cmake在我的项目中所需的所有静态库都不成功
- 为什么我的代码在输出中增加了93天
- 我的简单if-else语句是如何无法访问的代码
- 为什么我的for循环不能正确获取argv
- 我的项目不会像"undefined reference to `grpc::g_core_codegen_interface'"那样使用未定义的引用错误进行编译
- 0-1背包代码中的错误.我的代码中有什么错误
- 当我的阵列太大时出现分段错误
- 如何确认我的constexpr表达式实际上已经在编译时执行
- 为什么二进制搜索在我的测试中不起作用
- 如何指定我希望我的LIB链接到的DLL文件?-Visual Studio 2019
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 当我在main中声明了我的2d数组时,为什么我的程序会退出
- OpenGL在启用深度测试时不会丢弃我的碎片
- 如何强制文件描述符缓冲我的输出
- 我的帧缓冲有什么问题?
- 我的菜单的双重缓冲