调用system()后读取文件

时间:2015-04-22 03:12:31

标签: c++ file system

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

然后我的程序需要读入写入的文件。目前,我的程序读取文件的速度非常快,以至于其他程序的更改尚未命中文件系统,而我的程序读取的是过时的版本。

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

我从system()和CreateProcess专门切换到fork/execv,因此程序会阻止,我不必注意终止。所以,如果这会有所帮助,我可以改回来。

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

任何解决方案都需要有适用于Mac,Windows和Linux的版本。

2 个答案:

答案 0 :(得分:0)

据我所知,如果您尝试打开文件而不是处于读取模式但是处于写入模式,如果该文件已被其他进程写入,则会失败。

我建议有一个小的(几毫秒)等待时间来确保文件被另一个进程打开然后尝试写入它,当你可以实际写入文件然后你就可以阅读它。

我不确定Mac上的功能如何,但我认为它与Linux和Windows相同。

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

答案 1 :(得分:0)

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