gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:04:01 24 4
gpt4 key购买 nike

很多人想关闭他们文件描述符的缓冲。我想要相反的结果:我特意要配置一个文件描述符来缓冲,比如说,在写入磁盘之前 1K 的数据。

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

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

如果重要的话,这是在 linux 上。

最佳答案

How to force a file descriptor to buffer my output

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

write() 调用的行为必须如下:

After a write() to a regular file has successfully returned:

  • Any successful read() from each byte position in the file that was modified by that write shall return the data specified by the write() for that position until such byte positions are again modified.

  • Any subsequent successful write() to the same byte position in the file shall overwrite that file data.

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

I want to write some data, check the size of the file on disk, then flush, then check that the size has grown.

从根本上说,不适用于 write()。文件大小将随着写入的数据而增长 - write() 不缓冲数据。

如果你想让它这样做,你必须实现你自己的文件系统——一个不兼容 POSIX 的文件系统。

关于c++ - 如何强制文件描述符缓冲我的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51483247/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com