c,我如何检测另一个进程是否正在写入文件

时间:2012-04-05 19:54:23

标签: c file-io fopen

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

如何检测另一个进程是否正在写入文件? 这有可能用standard-c吗?

由于

2 个答案:

答案 0 :(得分:3)

使用标准C无法做到这一点。您可以做的最好的方法是在文件停止更改时启发式注意,例如:读取文件的最后几个块,睡眠 n 秒,然后再次读取块并与之前的读取进行比较。您还可以尝试仅查看文件搜索指针的末尾以查看它何时停止移动,但对于大文件(大小大于适合签名长整数的文件),POSIX函数ftello()需要以便携式方式执行。

答案 1 :(得分:-1)

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

FILE* f;
while( (f = fopen( fname, "w" )) == NULL ) {
  sleep( 100 );  // we want to be moderately polite by not continually hitting the file
}