fcntl(F_OFD_SETLK)
锁定打开的文件表条目(通常由 open()
获得)。容易理解。
但是在下面的例子中:
在其示例进程中,每个线程都调用
open()
,因此每个文件描述符应该指向不同的打开文件表条目。
然后在每个线程中执行
fcntl (fd, F_OFD_SETLKW, &lck)
只是在不同的打开文件表条目上获得锁定,这意味着这种锁定是完全错误的。
但是我在 Ubuntu 上测试过,由于某种原因它可以工作。我错过了什么?
老问题但是:多个文件描述符可以指向同一个打开的文件描述。在这种情况下,
OFD
样式的调用会在描述本身(因此是不可移植的,因为它是 Linux 概念)而不是描述符上设置咨询锁。细微差别。