调用 system() 后读取文件

File read after call to system()

我的 C++ 程序通过 system() 调用另一个程序。该程序写出到一个文件。无法修改调用的程序

然后我的程序需要读入写入的文件。目前,我的程序读入文件的速度如此之快,以至于其他程序的更改还没有到达文件系统,我的程序读入了一个过时的版本。

如何在我的程序尝试读取之前强制被调用程序完成写入?或者调用程序如何检查文件是否已完成写入?

我从 fork/execv 和 CreateProcess 切换到 system(),这样程序就会阻塞,我就不必等待终止。所以,如果这有帮助,我可以切换回来。

现在,我唯一的想法是在调用 system() 之前删除该文件——这样它就不会存在,除非写入完成。

任何解决方案都需要有 Mac、Windows 和 Linux 的版本。

据我所知,如果您尝试以写入模式而非读取模式打开文件,如果文件已经被另一个进程写入,它将失败。

我建议等待一小段时间(几毫秒)以确保文件已被其他进程打开,然后尝试在其上写入,当您真正可以在文件上写入时,您就可以读取了它。

我不确定 Mac 上的情况如何,但我认为它与此处的 Linux 和 Windows 相同。

使用 forkexec 而不是系统会好得多,所以我的建议只是一种解决问题的简单方法(但不推荐用于重要项目)。

你应该使用 wait() 方法来实现它。 wait 方法使父进程等待并休眠直到其子进程完成。您应该使用 fork() 然后执行生成的另一个进程副本。