我想从C程序创建一个文件,并且想在我的C二进制文件中使用较长时间。但是我想以这样的方式创建文件:在我的C程序完成对文件的创建和解锁之前,没有人(可以使用vim或任何其他编辑器)打开和读取文件内容。
请提前帮助我。
为此,您可以在Unix上定义强制性文件锁定。但是,有必要重新安装文件系统,以便使用强制性锁定。
1例如,要重新安装根fs,请使用(作为根):
mount -oremount,mand /
Run Code Online (Sandbox Code Playgroud)
2现在,让我们创建我们的秘密文件:
echo "big secret" > locked_file
Run Code Online (Sandbox Code Playgroud)
3我们需要设置set-group-id,并禁用文件的组执行特权:
chmod g+s,g-x locked_file
Run Code Online (Sandbox Code Playgroud)
还有我们用来锁定该文件的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 */
}
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请访问 http://kernel.org/doc/Documentation/filesystems/mandatory-locking.txt