gpt4 book ai didi

c++ - stat() 相对于文件系统是原子的吗

转载 作者:太空宇宙 更新时间:2023-11-04 01:16:30 36 4
gpt4 key购买 nike

我有一组可执行文件,它们会全天候每隔几分钟定期更新一组文件。我正在考虑编写一个单一的监控程序,它将持续检查所有这些文件的最后写入时间(使用函数 stat()),以便如果最近没有足够的更新,它可以响铃警报。不过,我担心的是,调用 stat() 的行为可能会导致试图写入该文件的程序失败。我需要担心吗?...如果是这样,是否有其他方法可以实现我的目标?

最佳答案

是的,stat 调用可以被认为是原子的,因为它返回的所有信息都保证是一致的。如果您在同一时刻调用 stat 一些其他进程正在写入文件,那么应该不可能,比如说,其他进程的写入反射(reflect)在 st_mtime 但不是st_size.

并且在任何情况下,肯定不可能在其他进程写入文件的同一时刻调用 stat 导致其他进程失败。 (这将是操作系统中一个严重且完全 Not Acceptable 错误——操作系统的主要工作之一是确保不相关的进程不会意外地以这种方式相互交互。这种缺乏干扰的特性是不过,通常我们所说的“原子”就是这个意思。)

尽管如此,监控进程的常用方法是通过其进程 ID。并且可能有大量预先编写的程序包可以帮助您管理一个或多个应该连续运行的进程,从而为您提供干净的启动/停止和监视功能。 (参见 s6 作为示例。我对这个包一无所知,也不推荐它;这只是我在网络搜索中遇到的第一个。)

另一种可能性,如果你有任何类型的 IPC你进程之间设置的机制,就是设置一个周期性的heartbeat每个人都发布,所以 watchdog timer某个地方可以检测到一个进程正在死亡。

不过,如果您想通过写入文件的及时性来持续监控您的流程,这听起来也是一种非常好的技术。

关于c++ - stat() 相对于文件系统是原子的吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230432/

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