【问题标题】:Portable way (linux & Windows) to have a file only modifiable by 1 process and not others in C/C++在 C/C++ 中,文件只能由 1 个进程而不是其他进程修改的便携式方式(Linux 和 Windows)
【发布时间】:2014-07-01 07:16:16
【问题描述】:

我正在寻找一种可移植的方式(Linux 和 Windows),以使文件只能由 1 个进程修改,而不能由 C/C++ 中的其他进程修改。

完整的要求是我想保留一个只能由 1 个正在运行的进程修改的文件,因为其他人应该只能读取它。

困难在于此过程使用供应商库,该库将在其生命周期(数十秒)内多次打开/关闭文件。

谢谢

【问题讨论】:

  • 为什么不将默认文件属性设置为只读,然后让进程在想要更改该文件时将其更改为读+写。
  • 我非常怀疑你可以在不修改供应商库的情况下做到这一点,或者如果可能的话,添加一些全局类型的锁。使用不同的解决方案重新设计整个想法也可能有效。 [user986959的想法行不通,因为一旦你改变了模式,所有其他人也被允许进入......]
  • 所有的流程都在你的掌控之中吗?
  • Linux 只有咨询锁和完全弱权限系统,所以你是 SOL。在 Windows 上,它可能开箱即用(如果 fopen("w") 通过 FILE_SHARE_WRITE 会中断,但默认选项是安全的)
  • 我认为您需要提供更多关于您如何与供应商库交互以及它如何打开文件的详细信息。您必须在库外部添加一个锁定功能。它的 api 是否允许您选择文件是以读/写方式打开还是以只读方式打开?能拦截打开文件吗?

标签: c++ c linux winapi


【解决方案1】:

你应该利用“进程间通信”

例如,在 Windows 上,您可以使用以下代码,确保只有一个进程能够写入此文件。

    int WriteToFile()
    {
         HANDLE _mutex = CreateMutex(NULL, TRUE, L"__File_Write__");
         if(GetLastError() == ERROR_ALREADY_EXISTS) 
         {
             return -1;
         }
         else
         {
             //write to file
             return 0;
         }
    }

【讨论】:

  • 我在想这样的东西,但我认为它不容易移植,除非我找到一种方法来包装 Linux 和 Windows 代码。不过感谢您提供的详细信息。
  • 有很多线程库可以抽象出这些细节
猜你喜欢
  • 2023-04-03
  • 2013-08-08
  • 2011-01-26
  • 1970-01-01
  • 1970-01-01
  • 2011-09-03
  • 2016-12-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多