[英]File read after call to system()
我的C ++程序通过system()
调用另一个程序。 该程序将写出到文件中。 我无法修改被调用的程序。
然后,我的程序需要读入已写入的文件。 目前,我的程序读取文件的速度如此之快,以至于其他程序所做的更改尚未到达文件系统,并且我的程序读取的版本已过时。
在我的程序尝试读取之前,如何强制被调用的程序完成编写? 也许调用程序如何检查文件是否已完成写入?
我专门从fork/execv
和CreateProcess切换到system()
,因此该程序将被阻塞,而我不必监视终止情况。 因此,如果可以的话,我可以切换回去。
现在,我唯一的想法是在调用system()
之前删除文件-这样,除非写入完成,否则该文件将不存在。
任何解决方案都需要具有适用于Mac,Windows和Linux的版本。
据我所知,如果您尝试不以读取模式而是以写入模式打开文件,则如果文件已被另一个进程写入,则它将失败。
我建议您等待一小段(几毫秒)的时间,以确保该文件是由其他进程打开的,然后尝试对其进行写入;当您实际可以在该文件上进行写入时,您便可以对其进行读取。
我不确定Mac上的工作方式如何,但我认为此处与Linux和Windows相同。
使用fork
和exec
而不是system会更好,所以我的建议只是解决问题的一种简单方法(但不建议用于重要项目)。
您应该使用wait()方法来实现这一点。 wait方法使父进程等待并使其休眠,直到其子进程完成。 您应该使用fork()然后执行生成的过程的另一个副本。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.