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

c、 如何检测另一个进程是否正在写入文件,c,file-io,fopen,C,File Io,Fopen,我确实在c下用fopen打开了大文件,并且有一种观察到的文件夹逻辑。 我想在文件完全复制到我观察到的文件夹后立即打开(或至少打开)该文件 如何检测另一个进程是否正在写入文件? 标准c有可能吗 谢谢使用标准C无法做到这一点。您所能做的最好的方法是试探性地注意文件停止更改的时间,例如,读取文件的最后几个块,休眠n秒,然后再次读取这些块并与以前的读取进行比较。您也可以尝试只观察文件末尾的seek指针,看看它何时停止移动,但对于大文件(大小大于有符号长文件所能容纳的大小),需要POSIX函数ftello

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

如何检测另一个进程是否正在写入文件? 标准c有可能吗


谢谢

使用标准C无法做到这一点。您所能做的最好的方法是试探性地注意文件停止更改的时间,例如,读取文件的最后几个块,休眠n秒,然后再次读取这些块并与以前的读取进行比较。您也可以尝试只观察文件末尾的seek指针,看看它何时停止移动,但对于大文件(大小大于有符号长文件所能容纳的大小),需要POSIX函数ftello()以便于移植。

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

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

这取决于你的操作系统。如果您使用的是基于GNU的系统,请获取“fuser”的源代码,它列出了系统上所有打开的文件。这将向您展示所需的API调用。还有其他一些实用程序可以监视文件系统操作,并在满足条件时运行其他进程,但这些都是依赖于操作系统的。类似的做法还有:在写入过程中查看“inotify”flock()文件,完成后将其解锁,然后使用flock()在另一个过程中进行F_测试,以检查是否locked@strkol从他的描述来看,他似乎无法控制写作过程,我认为这是行不通的
fopen
不会检查是否有人已经在AFAIK中写入文件。你能把一些关于这个的文档连接起来吗?事实证明你是对的……至少我在这个过程中学到了一些东西。谢谢你打电话给我,Pavan.fseek到最后并比较文件大小是我现在正在做的。看起来对我的案子有效。谢谢