我编写了一个C程序,用于轮询目录中的文件,但有时在访问该文件时会出错。我想知道在尝试使用它之前,我是否需要等待它完成复制或其他什么?我设置了一个循环,不断加载图像文件,直到函数不再返回null:
while ( (image = SDL_LoadBMP(path)) == NULL )
printf("image = NULLn");
最终它不再为空。正确的处理方法是什么?
处理此问题的最佳方法是在创建te文件时将其保存在"不可见"目录中。并在关闭后将其移动到spool目录。(rename()是原子的)。
当然,这需要从实际生成文件的过程中进行一些合作。
BTW:我假设这里是UNIX。也许在其他平台上也可以使用类似的方法。(更改可见性/可读性文件属性,而不是重命名/移动)
实际上很难做到这一点,尤其是要做到可靠。或多或少不可能有效地做到这一点。
解决此问题的最简单方法是从C程序运行fuser
,以确定某个进程是否打开了该文件。
最后,请注意,如果您有一个循环在等待某个东西,它应该在重试之间等待,以避免浪费计算资源。毕竟,想象一下,如果系统上的每个程序都有一个繁忙的循环,计算机会是什么样子。
EDIT:如果您控制生成文件的应用程序,那么wildplaser@建议的解决方案是最好的。