我在c下打开带有fopen的大文件,带有一种观察到的文件夹逻辑。 我想在将文件完全复制到我的观察文件夹后立即打开(或至少打开)。
如何检测另一个进程是否正在写入文件? 这有可能用standard-c吗?
由于
答案 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
}