Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filelock 用C程序实现Linux下的文件锁定_Filelock - Fatal编程技术网

Filelock 用C程序实现Linux下的文件锁定

Filelock 用C程序实现Linux下的文件锁定,filelock,Filelock,我想从c程序中创建一个文件,我想在我的c二进制文件中使用较长的时间。但我希望创建文件的方式是,在我的c程序处理完创建的文件并解锁它之前,没有人(可以使用vim或任何其他编辑器)能够打开和读取文件内容 请提前帮助我。为此,您可以在Unix上定义一个强制文件锁。 然而,有必要(重新)装载文件系统,以便它遵守强制锁 1例如,要重新装载根fs,请使用(作为根): 2现在,让我们创建我们的机密文件: echo "big secret" > locked_file 3我们需要设置组id,并禁用文件上

我想从c程序中创建一个文件,我想在我的c二进制文件中使用较长的时间。但我希望创建文件的方式是,在我的c程序处理完创建的文件并解锁它之前,没有人(可以使用vim或任何其他编辑器)能够打开和读取文件内容


请提前帮助我。为此,您可以在Unix上定义一个强制文件锁。 然而,有必要(重新)装载文件系统,以便它遵守强制锁

1例如,要重新装载根fs,请使用(作为根):

2现在,让我们创建我们的机密文件:

echo "big secret" > locked_file
3我们需要设置组id,并禁用文件上的组执行权限:

chmod g+s,g-x locked_file
以及我们锁定该文件的C代码: (该代码将锁定文件,并将其锁定一段时间,您可以尝试另一个终端读取该文件,读取将延迟到解除锁定)

#包括
#包括
#包括
int main(){
struct-flock-fl;
int-fd;
fl.l_type=F_WRLCK;/*读/写锁*/
fl.l_whence=SEEK_SET;/*文件开头*/
fl.l_起点=0;/*从l_起点的偏移量*/
fl.l_len=0;/*长度,0=至EOF*/
fl.l_pid=getpid();/*pid*/
fd=打开(“锁定的文件”,O|RDWR | O_EXCL);/*不100%确定是否需要O_EXCL*/
fcntl(fd、F_设置LKW和fl);/*设置锁定*/
美国LEEP(10000000);
printf(“\n释放锁\n”);
fl.l_类型=F_解锁;
fcntl(fd、F_设置和fl);/*未设置锁定*/
}
更多信息请访问

可以使用flock()锁定文件。它的语法是

#include <sys/file.h>
#define   LOCK_SH   1    /* shared lock */
#define   LOCK_EX   2    /* exclusive lock */
#define   LOCK_NB   4    /* don't block when locking */
#define   LOCK_UN   8    /* unlock */

int flock(int fd, int operation);
是吗?你,但是你。
#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 */

}
#include <sys/file.h>
#define   LOCK_SH   1    /* shared lock */
#define   LOCK_EX   2    /* exclusive lock */
#define   LOCK_NB   4    /* don't block when locking */
#define   LOCK_UN   8    /* unlock */

int flock(int fd, int operation);
int fd = open("test.txt","r");
int lock = flock(fd, LOCK_SH);  // Lock the file . . .
// . . . .
// Locked file in use 
// . . . .
int release = flock(fd, LOCK_UN);  // Unlock the file . . .