Chr*_*son 7 c++ linux file-io race-condition
我需要我的代码(C++,在Linux上)来调用第二个可执行文件,之前已经编写了一个由第二个程序读取的输出文件.天真的做法,
std::ofstream out("myfile.txt");
// write output here
out.close();
system("secondprogram myfile.txt");
Run Code Online (Sandbox Code Playgroud)
遭遇潜在的竞争条件,即使执行out.close(),文件也无法立即被读取secondprogram
?如果是这样,解决这个问题的最佳做法是什么?
三个音符:
mkstemp
.我之前错过了一个潜在的故障模式:当文件无法打开时,您似乎没有办法恢复secondprogram
。问题不在于文件在返回后可能被锁定/不一致,而是另一个与您的程序完全无关的程序可能会在和close()
之间打开该文件(例如,AV 扫描仪、某人浏览包含该文件的目录、备份过程) )。如果发生这种情况,即使您的程序行为正确,也会失败。close()
system()
grep
secondprogram
secondprogram
TL/DR:即使一切按预期工作,您也必须考虑可能无法打开文件的情况!