您无法打开一个目录进行写入,这意味着您无法在其上获取写锁。 即使您可以获取写锁,请记住和以及其他类型的POSIX锁都是有条件的,因此它们并不能实际阻止不尊重锁定的软件执行操作。 也许您想查看一些类似于的东西,它可以锁定整个文件系统。 不过,对于您的用例可能没有用。
flock或lockf可以在目录上工作吗? flock - 可以,lockf - 不行。 您可以使用flock打开目录进行读取,并获取一个咨询性的独占锁: int fd = open("somedir", O_RDONLY); if (flock(fd, LOCK_EX | LOCK_NB) == 0) { // success } else { // failed } 但是你不能打开一个目录进行写操作,这意味着你无法对其进行fcntl风格的独占锁定,无论是咨询性的还是强制性的。 当然,如果您实际上需要“防止共享访问目录”,那么这与“锁定”是完全不同的问题 - 您可以更改其权限,重命名它,锁定整个文件系统,使用IPC等。