为此,您可以在 Unix 上定义一个强制文件锁。
但是,有必要(重新)挂载文件系统,以便它遵守强制锁。
1 例如重新挂载root fs,使用(作为root):
mount -oremount,mand /
2 现在,让我们创建我们的秘密文件:
echo "big secret" > locked_file
3 我们需要设置-group-id,并禁用文件的组执行权限:
chmod g+s,g-x locked_file
以及我们用于锁定该文件的 C 代码:
(代码会锁定文件,并保持锁定一段时间,你可以尝试另一个终端读取它,读取会延迟到锁定释放)
#include <fcntl.h>
#include <stdio.h>
#include <unistd.h>
int main() {
struct flock fl;
int fd;
fl.l_type = F_WRLCK; /* read/write lock */
fl.l_whence = SEEK_SET; /* beginning of file */
fl.l_start = 0; /* offset from l_whence */
fl.l_len = 0; /* length, 0 = to EOF */
fl.l_pid = getpid(); /* PID */
fd = open("locked_file", O_RDWR | O_EXCL); /* not 100% sure if O_EXCL needed */
fcntl(fd, F_SETLKW, &fl); /* set lock */
usleep(10000000);
printf("\n release lock \n");
fl.l_type = F_UNLCK;
fcntl(fd, F_SETLK, &fl); /* unset lock */
}
更多信息见
http://kernel.org/doc/Documentation/filesystems/mandatory-locking.txt