F_DUPFD:复制文件描述符 F_DUPFD_CLOEXEC:复制文件描述符,新文件描述符被设置了close-on-exec F_GETFD:读取文件描述标识 F_SETFD:设置文件描述标识 F_GETFL:读取文件状态标识 F_SETFL:设置文件状态标识 F_GETLK:如果已经被加锁,返回该锁的数据结构。如果没有被加锁,将l_type设置为F_UNLCK F_SETLK:给文件加...
fcntl(fd, F_GETLK, &lock); (1分) if (lock.l_type != F_UNLCK) (1分) if (lock.l_type == F_RDLCK) (1分) else if (lock.l_type == F_WRLCK) (1分) lock.l_type = type; (1分) if ((fcntl(fd, F_SETLKW, &lock)) < 0) (1分) switch(lock.l_type) (1分) case F_...
文件的第10~29个字节已经存在一个读锁,文件的第40~49个字节中已经存在一个写锁,则调用fcntl时,如果用F_GETLK命令,来测试在第10~29个字节中是否可以创建一个读锁,因为这个锁可以被创建,所以,fcntl返回非-1,同时,flock结构的内容也不会改变,flock_st.l_pid = -1。
(3) 进程不能使用F_GETLK命令来测试它自己是否再文件的某一部分持有一把锁。F_GETLK命令定义说明,返回信息指示是否现存的锁阻止调用进程设置它自己的锁。因为,F_SETLK和F_SETLKW命令总是替换进程的现有锁,所以调用进程绝不会阻塞再自己持有的锁上,于是F_GETLK命令绝不会报告调用进程自己持有的锁。 (4) 进程终止...
F_SETFL:设置文件状态标识 F_GETLK:如果已经被加锁,返回该锁的数据结构。如果没有被加锁,将l_type设置为F_UNLCK F_SETLK:给文件加上进程锁 F_SETLKW:给文件加上进程锁,如果此文件之前已经被加了锁,则一直等待锁被释放。 接下来看两段代码: #include <fcntl.h>#include<unistd.h>#include<cstring>#include...
F_GETLK:获取锁定信息。 F_SETLKW:以阻塞方式设置锁定信息。 例如,要对文件 /tmp/test 进行共享锁定,可以使用以下代码: 代码语言:c 代码运行次数:0 复制 Cloud Studio代码运行 #include<fcntl.h>intfd=open("/tmp/test",O_RDWR);structflockfl;fl.l_type=F_RDLCK;fl.l_whence=SEEK_SET;fl.l_start=0;...
F_GETLK命令: 它用于获取fildes(fcntl的第一个参数)打开的文件的锁信息,它不会尝试去锁定文件,调用进程可以把自己想创建的锁类型信息传递给fcntl,函数调用就会返回将会阻止获取锁的任何信息,即它可以测试你想创建的锁是否能成功被创建。fcntl调用成功时,返回非-1,如果锁请求可以成功执行,flock结构将保持不变,如果锁...
设置/获取文件状态标志 F_GETFL (void) F_SETFL (long) 获取/设置文件锁 F_GETLK F_SETLK,F_SETLKW 其中复制文件描述符可参见《linux系统编程之文件与I/O(五):打开文件的内核结构file和重定向》,文件描述符的标志只有一个即FD_CLOEXEC,设置/获取文件描述符标志看这里。下面先来看设置/获取文件状态标志。
下面首先给出了使用fcntl 函数的文件记录锁函数。在该函数中,首先给flock 结构体的对应位赋予相应的值。接着使用两次fcntl函数分别用于给相关文件上锁和判断文件是否可以上锁,这里用到的cmd值分别为F_SETLK 和F_GETLK。 这个函数的源代码如下所示: /*lock_set函数*/ ...