使用C轮询Linux中新文件的dir - 一旦出现,我是否需要等到它准备好被使用?

lin*_*uff 1 c null file polling

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

while (  (image = SDL_LoadBMP(path)) == NULL  )
    printf("image = NULL\n");
Run Code Online (Sandbox Code Playgroud)

最终它不再是空的.处理这个问题的正确方法是什么?

wil*_*ser 5

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

当然,这假定了实际生成文件的过程的一些合作.

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