等待文件存在并且不被其他人

时间:2018-01-03 20:50:02

标签: c++ linux file-io filesystems c++17

问题

如何在创建后立即监控文件系统以读取文件。这将适用于基于Linux的系统,但如果解决方案是跨平台的,那将是很好的。重要的要求是,不应该有任何其他文件描述符可以写入该配置文件。

我已阅读过inotify,但这不是跨平台的,需要大量的知识。我很好奇新的c ++ 17文件系统模块。

我可以通过简单的while(!fileexist(fielanme)) sleep(1);来做到这一点但我好奇地接受了更成熟的解决方案

背景

我正在编写可以从API(REST)配置的应用程序。但是一旦配置就可以轻松启动(存储配置文件)。

所以我认为这是将这项任务分成两部分的好方法:

  1. REST - >只需使用conf。
  2. 创建文件
  3. 在读取配置时,主要等待文件存在并阻止文件被其他人在写入模式下打开。

1 个答案:

答案 0 :(得分:3)

没有跨平台的方式来做到这一点。最好的方法是将文件写入临时名称,然后将其重命名为应用程序正在查找的文件。在大多数操作系统上,rename()操作是原子操作。然后,阅读应用程序可以简单地等待文件存在。

所以等待代码的结构可能是(这是伪代码):

while (true) {
    if (file_exists(filename)) {
        process the file
        remove the file
    }
    sleep(wait_time);
}