如果一个进程使用open(2) (或类似的)为同一个文件获取多个描述符,这些描述符将由flock()独立处理。使用这些文件描述符之一锁定文件的尝试可能被调用进程已通过另一个描述符放置的锁拒绝。
如果flock()独立处理描述符,那么为什么通过另一个描述符放置的锁会拒绝使用其中一个文件描述符锁定文件呢?在这里独立意味着什么?
另外,如果我解锁其中一个描述符,其他描述符也会解锁吗?
发布于 2017-11-15 06:05:53
flock()独立处理意味着,在试图修改另一个描述符时,flock()不会“询问”一个描述符。然而,这并不意味着他们是真正独立的。如果flock()试图锁定其中一个,而另一个已被锁定,则此尝试可能会阻止。
把它看作是两级机制。flock()一次只查看一个描述符,但最终,在尝试锁定时,系统会尝试移动到dipper级别并实际锁定,然后就会出现问题。
另外,如果我解锁其中一个描述符,其他描述符也会解锁吗?
我没有把握。这个引号(下面)指出,如果一个文件有来自fork(2), dup(2)的多个描述符,情况就是这样。然而,在处理多个open(2)的第二段中,没有什么能说明这一点,这使我相信这不是一件好事:)
来自这里
flock()创建的锁与打开的文件描述相关联(参见open(2))。这意味着重复的文件描述符(例如,由fork(2)或dup(2)创建)引用同一个锁,并且可以使用这些文件描述符的任何修改或释放该锁。此外,锁可以通过对任何重复文件描述符的显式LOCK_UN操作来释放,或者在关闭所有此类文件描述符时释放。 如果一个进程使用open(2) (或类似的)为同一文件获取多个文件描述符,这些文件描述符将由flock()独立处理。使用这些文件描述符之一锁定文件的尝试可能被调用进程已通过另一个文件描述符放置的锁拒绝。
https://stackoverflow.com/questions/47300202
复制相似问题