Linux文件锁的示例
为了理解文件锁是如何工作的,我们建立程序文件file_lock.c:
|
用gcc编译此程序:
# cc -o file_lock file_lock.c |
使用mount命令带“mand”参数来重新挂载根文件系统,如下所示。这将在文件系统级别使能强制锁功能。
注意:你必须切换到root用户才能执行下面的命令。
# mount -oremount,mand / |
在可执行的(file_lock所在的)目录中创建两个名为“advisory.txt”和“mandatory.txt”的文件。对于“mandatory.txt”使能Set-Group-ID,同时不使能Group-Execute-Bit,如下所示:
# touch advisory.txt
# touch mandatory.txt # chmod g+s,g-x mandatory.txt |
测试协同锁:执行示例程序,以“advisory.txt”作为参数。
# ./file_lock advisory.txt |
此程序将等待用户的输入。从另一个终端或控制台,尝试输入以下命令行:
# ls >>advisory.txt |
在上面的例子中,ls命令会将其输出写入到advisory.txt文件中。即使我们获得了一个写入锁,仍然会有一些进程(非合作)能够往文件里写入数据。这就是所谓的“协同”锁。
测试强制锁:再次执行示例程序,以“mandatory.txt”作为参数。
# ./file_lock mandatory.txt |
从另一个终端或控制台,尝试输入以下命令行:
# ls >>mandatory.txt |
在上面的例子中,ls命令在将其输出写入到mandatory.txt文件之前,会等待文件锁被删除。虽然它仍然是一个非合作进程,但强制锁起了作用。