【发布时间】:2018-05-14 22:57:48
【问题描述】:
我是 C 和 Linux 的新手,想知道在 Linux 中使用 C 函数 lockf、flock 和 fcntl 锁定文件是什么意思?因为我来自 Windows 背景,锁定的文件永远不能被任何其他进程更改,但对于 linux,当我为我的进程锁定文件时,该文件可以被任何其他进程修改,甚至可以被桌面文件浏览器删除!
我使用了“lslock”程序,并且我的文件都使用 Type/POSIX MODE/WRITE START/0 END/0 PATH/my/file/path 锁定
Linux中的锁定文件与Windows上的锁定文件有不同的含义,Windows锁定的文件不可能被任何其他进程更改。
另外,我在互联网上读到 NFS 'linux' 不提供文件锁定,除非确定了一个字节范围,如何做到这一点?
我浏览了这篇文章的例子 https://gavv.github.io/blog/file-locks/
【问题讨论】:
-
Unix系统一般使用
advisory locking,这要看大家玩的好不好,选择看文件是否被锁,遵守锁。Mandatory locking,仲裁器强制锁定,也可以在 Unix 系统上完成,但我相信这不是默认设置,因为与咨询锁定相比,它可能相当慢。 -
请记住这三个函数可能不能很好地相互配合。此外,根据手册页,
flock的可移植性较差(它不是 POSIX 函数)并且不适用于 Linux 上 NFS 上的文件,因此您可能更喜欢lockf或fcntl。有关这三个函数的更多信息,请参阅this excellent answer。
标签: c linux posix gnu file-locking