【发布时间】:2015-06-26 22:10:51
【问题描述】:
我在我的代码服务器/客户端中使用了flock() 来只允许一个进程读取文件。但是,如果另一个进程尝试打开该文件,我认为计算会暂停,相反,我会处理一个错误以提供一个输出,向用户解释这是怎么回事。我该怎么做?
【问题讨论】:
我在我的代码服务器/客户端中使用了flock() 来只允许一个进程读取文件。但是,如果另一个进程尝试打开该文件,我认为计算会暂停,相反,我会处理一个错误以提供一个输出,向用户解释这是怎么回事。我该怎么做?
【问题讨论】:
您的其他进程在调用open() 时不会收到错误消息。调用flock() 是建议 - 调用open()、read() 或write() 失败不会强制执行锁定。其他进程需要进行自己的flock() 调用,以确定文件是否已被锁定以进行读取或写入。
有关完整信息,请参阅man page。
【讨论】:
您需要使用强制文件锁定,而不是建议文件锁定。 flock 所做的建议文件锁定只能防止两个进程同时锁定同一个文件。它对不尝试锁定文件的不合作进程没有影响。
您的 UNIX 可能有也可能没有强制文件锁,它们可能启用也可能不启用。
【讨论】:
read(2)、write(2) 和 open(2) 在 Solaris 和 Linux 中按预期失败。使用上述方法锁定的文件不会阻止unlink(2),因此尽管强制锁定,但可以毫无错误地删除文件。 (Unix 环境中的高级编程第 3 版第 496 页)