【问题标题】:open() system call waitingopen() 系统调用等待
【发布时间】:2015-03-28 01:36:36
【问题描述】:

有没有简单的方法,让open() 等到它是真的?例如,如果我调用

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

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

【问题讨论】:

  • 打它”打什么,拜托?
  • 你在问open(2)-ing a fifo(7) 在 Linux 上吗?如果是这样,请 RTFM 并编辑您的问题(至少添加一个 Linux 标签)!
  • @BasileStarynkevitch:不,OP 正在询问创建一个锁定文件以及在它已经存在并且您想等待它被删除的情况下该怎么做。

标签: c posix


【解决方案1】:

在 Linux 上,您可以在包含目录上使用 inotify 来阻止直到下一次更改目录,然后再次尝试使用 openO_CREAT|O_EXCL。但这不是可移植的,并且文件创建无论如何都不是进行锁定的正确方法。您可能应该就您实际尝试解决的锁定问题的细节提出一个新问题,并寻找更好的解决方案。

【讨论】:

    【解决方案2】:

    您可以循环打开文件,如果文件打开失败,则休眠一段时间然后再次循环。要么无限循环,要么循环一段时间(n*sleep)。

    您是否尝试使用文件来同步进程?查看互斥体/信号量。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-17
      • 1970-01-01
      • 2015-06-02
      • 1970-01-01
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 2010-10-10
      相关资源
      最近更新 更多