繁体   English   中英

调用system()后读取文件

[英]File read after call to system()

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

然后,我的程序需要读入已写入的文件。 目前,我的程序读取文件的速度如此之快,以至于其他程序所做的更改尚未到达文件系统,并且我的程序读取的版本已过时。

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

我专门从fork/execv和CreateProcess切换到system() ,因此该程序将被阻塞,而我不必监视终止情况。 因此,如果可以的话,我可以切换回去。

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

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

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

我建议您等待一小段(几毫秒)的时间,以确保该文件是由其他进程打开的,然后尝试对其进行写入;当您实际可以在该文件上进行写入时,您便可以对其进行读取。

我不确定Mac上的工作方式如何,但我认为此处与Linux和Windows相同。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM