如何在Linux机器上用C语言锁定一个目录

8

flock或lockf能在目录上工作吗?在Linux机器上有其他方法锁定目录吗?


你需要定义一下“lock”的含义。 - Matt Joiner
1
只需将目录设置为只读即可;这似乎最接近“锁定”目录的概念。 - Cody Gray
2
为什么要锁定一个目录? - Basile Starynkevitch
3个回答

2

是的,有关在文件/目录上使用flock的更多信息可以在这里找到。


1

您无法打开一个目录进行写入,这意味着您无法在其上获取写锁。

即使您可以获取写锁,请记住和以及其他类型的POSIX锁都是有条件的,因此它们并不能实际阻止不尊重锁定的软件执行操作。

也许您想查看一些类似于的东西,它可以锁定整个文件系统。 不过,对于您的用例可能没有用。


2
你不需要打开它以获取独占锁:$ mkdir testdir $ strace flock testdir -c 'echo foo' ... open("testdir", O_RDONLY|O_CREAT|O_NOCTTY, 0666) = -1 EISDIR (是一个目录) open("testdir", O_RDONLY|O_NOCTTY) = 3 flock(3, LOCK_EX) = 0 ... - Scott Lamb
1
我纠正一下...对于flock风格的锁。对于fcntl风格的锁,似乎您确实需要写访问权限来请求写锁定。 - Celada

1

flocklockf可以在目录上工作吗?

flock - 可以,lockf - 不行。

您可以使用flock打开目录进行读取,并获取一个咨询性的独占锁:

int fd = open("somedir", O_RDONLY);
if (flock(fd, LOCK_EX | LOCK_NB) == 0) {
  // success
} else {
  // failed
}

但是你不能打开一个目录进行写操作,这意味着你无法对其进行fcntl风格的独占锁定,无论是咨询性的还是强制性的。


当然,如果您实际上需要“防止共享访问目录”,那么这与“锁定”是完全不同的问题 - 您可以更改其权限,重命名它,锁定整个文件系统,使用IPC等。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接