open()系统调用等待

时间:2015-03-27 17:09:01

标签: c posix

是否有一种简单的方法让open()等到它是真的?例如,如果我打电话

file = open("lock", O_CREAT | O_EXCL, S_IRUSR | S_IWUSR);

如果另一个进程遇到它,我希望它等到该文件不存在,因此可以再次创建它。

2 个答案:

答案 0 :(得分:1)

在Linux上,您可以使用包含目录上的inotify来阻止,直到下一次更改目录,然后再次使用open尝试O_CREAT|O_EXCL。但这不是可移植的,文件创建不是正确的锁定方式。您可能应该问一个关于您实际尝试解决的锁定问题的具体细节的新问题,并寻找更好的解决方案。

答案 1 :(得分:0)

你可以将文件打开一个循环,如果文件打开失败,请暂停一段时间然后再循环。要么无限循环,要么循环一段时间(n *睡眠)。

您是否尝试使用文件同步处理?查看互斥锁/信号量。