在linux中用C轮询新文件的目录-一旦它出现,我需要等待它准备好使用吗



我编写了一个C程序,用于轮询目录中的文件,但有时在访问该文件时会出错。我想知道在尝试使用它之前,我是否需要等待它完成复制或其他什么?我设置了一个循环,不断加载图像文件,直到函数不再返回null:

while (  (image = SDL_LoadBMP(path)) == NULL  )
    printf("image = NULLn");

最终它不再为空。正确的处理方法是什么?

处理此问题的最佳方法是在创建te文件时将其保存在"不可见"目录中。并在关闭后将其移动到spool目录。(rename()是原子的)。

当然,这需要从实际生成文件的过程中进行一些合作。

BTW:我假设这里是UNIX。也许在其他平台上也可以使用类似的方法。(更改可见性/可读性文件属性,而不是重命名/移动)

实际上很难做到这一点,尤其是要做到可靠。或多或少不可能有效地做到这一点。

解决此问题的最简单方法是从C程序运行fuser,以确定某个进程是否打开了该文件。

最后,请注意,如果您有一个循环在等待某个东西,它应该在重试之间等待,以避免浪费计算资源。毕竟,想象一下,如果系统上的每个程序都有一个繁忙的循环,计算机会是什么样子。

EDIT:如果您控制生成文件的应用程序,那么wildplaser@建议的解决方案是最好的。

相关内容

  • 没有找到相关文章

最新更新