【问题标题】:Using flock() in c unix, which kind of error I receive trying opening file in another process?在 c unix 中使用flock(),尝试在另一个进程中打开文件时会收到哪种错误?
【发布时间】:2015-06-26 22:10:51
【问题描述】:

我在我的代码服务器/客户端中使用了flock() 来只允许一个进程读取文件。但是,如果另一个进程尝试打开该文件,我认为计算会暂停,相反,我会处理一个错误以提供一个输出,向用户解释这是怎么回事。我该怎么做?

【问题讨论】:

    标签: c file unix client flock


    【解决方案1】:

    您的其他进程在调用open() 时不会收到错误消息。调用flock()建议 - 调用open()read()write() 失败不会强制执行锁定。其他进程需要进行自己的flock() 调用,以确定文件是否已被锁定以进行读取或写入。

    有关完整信息,请参阅man page

    【讨论】:

    • 谢谢你=D,我已经使用alarm()绕过了这个问题,以便了解我是否被困在flock()
    【解决方案2】:

    您需要使用强制文件锁定,而不是建议文件锁定。 flock 所做的建议文件锁定只能防止两个进程同时锁定同一个文件。它对不尝试锁定文件的不合作进程没有影响。

    您的 UNIX 可能有也可能没有强制文件锁,它们可能启用也可能不启用。

    【讨论】:

    • 还有一些强制锁实现是错误的。 Linux 和 Solaris 提供的默认强制锁定是设置 set-group-id 位和删除组执行位。 read(2)write(2)open(2) 在 Solaris 和 Linux 中按预期失败。使用上述方法锁定的文件不会阻止unlink(2),因此尽管强制锁定,但可以毫无错误地删除文件。 (Unix 环境中的高级编程第 3 版第 496 页)
    猜你喜欢
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 2021-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多