2

我确实在 c 下使用 fopen 打开大文件,并带有一种观察到的文件夹逻辑。我想在文件完全复制到我观察到的文件夹后立即打开(或至少读取)文件。

我如何检测另一个进程是否正在写入文件?使用标准c可以吗?

谢谢

4

2 回答 2

3

使用标准 C 没有办法做到这一点。您可以做的最好的事情是启发式地注意文件何时停止更改,例如读取文件的最后几个块,休眠n秒,然后再次读取块并与之前的读取进行比较。您也可以尝试只观察文件末尾的查找指针以查看它何时停止移动,但对于大文件(大小大于带符号长的大小),需要 POSIX 函数 ftello() 才能便携。

于 2012-04-05T20:14:38.993 回答
-1

这有点“粗鲁”,但您可以继续尝试以写入模式打开它;只要它被其他文件写入,fopen就会失败。像这样的东西:

FILE* f;
while( (f = fopen( fname, "w" )) == NULL ) {
  sleep( 100 );  // we want to be moderately polite by not continually hitting the file
}
于 2012-04-05T20:30:56.737 回答