调用 system() 后读取文件
File read after call to system()
我的 C++ 程序通过 system()
调用另一个程序。该程序写出到一个文件。无法修改调用的程序
然后我的程序需要读入写入的文件。目前,我的程序读入文件的速度如此之快,以至于其他程序的更改还没有到达文件系统,我的程序读入了一个过时的版本。
如何在我的程序尝试读取之前强制被调用程序完成写入?或者调用程序如何检查文件是否已完成写入?
我从 fork/execv
和 CreateProcess 切换到 system()
,这样程序就会阻塞,我就不必等待终止。所以,如果这有帮助,我可以切换回来。
现在,我唯一的想法是在调用 system()
之前删除该文件——这样它就不会存在,除非写入完成。
任何解决方案都需要有 Mac、Windows 和 Linux 的版本。
据我所知,如果您尝试以写入模式而非读取模式打开文件,如果文件已经被另一个进程写入,它将失败。
我建议等待一小段时间(几毫秒)以确保文件已被其他进程打开,然后尝试在其上写入,当您真正可以在文件上写入时,您就可以读取了它。
我不确定 Mac 上的情况如何,但我认为它与此处的 Linux 和 Windows 相同。
使用 fork
和 exec
而不是系统会好得多,所以我的建议只是一种解决问题的简单方法(但不推荐用于重要项目)。
你应该使用 wait() 方法来实现它。 wait 方法使父进程等待并休眠直到其子进程完成。您应该使用 fork() 然后执行生成的另一个进程副本。
我的 C++ 程序通过 system()
调用另一个程序。该程序写出到一个文件。无法修改调用的程序
然后我的程序需要读入写入的文件。目前,我的程序读入文件的速度如此之快,以至于其他程序的更改还没有到达文件系统,我的程序读入了一个过时的版本。
如何在我的程序尝试读取之前强制被调用程序完成写入?或者调用程序如何检查文件是否已完成写入?
我从 fork/execv
和 CreateProcess 切换到 system()
,这样程序就会阻塞,我就不必等待终止。所以,如果这有帮助,我可以切换回来。
现在,我唯一的想法是在调用 system()
之前删除该文件——这样它就不会存在,除非写入完成。
任何解决方案都需要有 Mac、Windows 和 Linux 的版本。
据我所知,如果您尝试以写入模式而非读取模式打开文件,如果文件已经被另一个进程写入,它将失败。
我建议等待一小段时间(几毫秒)以确保文件已被其他进程打开,然后尝试在其上写入,当您真正可以在文件上写入时,您就可以读取了它。
我不确定 Mac 上的情况如何,但我认为它与此处的 Linux 和 Windows 相同。
使用 fork
和 exec
而不是系统会好得多,所以我的建议只是一种解决问题的简单方法(但不推荐用于重要项目)。
你应该使用 wait() 方法来实现它。 wait 方法使父进程等待并休眠直到其子进程完成。您应该使用 fork() 然后执行生成的另一个进程副本。