gpt4 book ai didi

c++ - 在 MacOSX 上,在 C++ 程序中,我对文件 IO 有什么保证

转载 作者:太空狗 更新时间:2023-10-29 22:53:25 29 4
gpt4 key购买 nike

我在 MacOSX 上。我正在编写一个多线程程序。一个线程进行日志记录。非日志线程可能随时崩溃。

我应该在记录器中采用什么约定/我可以有什么保证?

我更喜欢这样一种解决方案,即使我在部分写入过程中崩溃,之前的写入仍然会转到磁盘,并且在回读日志时,我可以弄清楚“啊,我写了 100 个完整的实体,然后我崩溃了第 101 个。

谢谢!

最佳答案

我在 Linux 上编程,而不是 MacOSX,但那里可能是一样的。

如果你的程序日志中只有一个线程,这意味着你在这个日志线程中缓冲日志数据,然后它把它写入一个文件可能是一个更大的部分以避免太多的 I/O 操作并使日志过程更快.

不好的是,如果一个线程出现段错误,整个进程连同缓冲数据一起被销毁。

我知道的解决方案(适用于 Linux)是:

  1. 通过套接字传输日志数据,而不使用缓冲日志线程(例如 syslog)。在这种情况下,操作系统可能会处理写入套接字的数据,即使您的应用程序崩溃,数据也应该在另一端接收并成功记录。

  2. Don 使用日志记录线程,每个线程都可以同步记录到文件中。在这种情况下,崩溃后日志数据的损失应该很小或没有。虽然速度较慢。

我还不知道这个问题的更好解决方案,不过学习一些会很有趣。

关于c++ - 在 MacOSX 上,在 C++ 程序中,我对文件 IO 有什么保证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2431434/

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