Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可移植方式(linux和Windows),使文件只能由一个进程修改,而不能由C/C++;_C++_C_Linux_Winapi - Fatal编程技术网

C++ 可移植方式(linux和Windows),使文件只能由一个进程修改,而不能由C/C++;

C++ 可移植方式(linux和Windows),使文件只能由一个进程修改,而不能由C/C++;,c++,c,linux,winapi,C++,C,Linux,Winapi,我正在寻找一种可移植的方式(linux和Windows),使文件只能由一个进程修改,而不能由C/C++中的其他进程修改 完整的要求是,我想让一个文件只能由一个正在运行的进程修改,因为其他进程应该只能读取它 困难在于此过程使用的供应商库在文件生命周期内(数十秒)会多次打开/关闭文件 谢谢您应该使用“进程间通信” 例如,在Windows上,您可以使用以下代码,以确保只有一个进程能够写入此文件 int WriteToFile() { HANDLE _mutex = C

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

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

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


谢谢

您应该使用“进程间通信”

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

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

为什么不将默认文件属性设置为只读,然后让流程在需要更改该文件时将其更改为读+写。我很怀疑您是否可以在不修改供应商库的情况下执行此操作,或者如果可能,添加一些全局类型的锁。对整个想法进行重新设计,使用不同的解决方案也可能奏效。[user986959的想法行不通,因为一旦您更改模式,其他所有进程也可以进入…]所有进程都在您的控制下吗?Linux只有建议锁,权限系统非常弱,因此您就可以进入了。在Windows上,它可能只是开箱即用(如果
fopen(“w”)
通过
FILE\u SHARE\u WRITE
,则会中断,但默认选项是安全的),我认为您需要提供有关如何与供应商库交互以及如何打开文件的更多详细信息。您必须在库外部添加一个锁定函数。它的api是否允许您选择文件是以读/写方式打开还是以只读方式打开?你能截获文件的打开吗?我想这样做,但我认为它不容易移植,除非我找到包装Linux和Windows代码的方法。不过,感谢您提供的详细信息。有很多线程库可以将这些详细信息提取出来