文件锁的结构体-爱代码爱编程
文件锁
-
并发对文件I/O操作的影响
解决办法?
2)文件锁
用法:man 2 fcntl头文件:#include <unistd.h> #include <fcntl.h>
函数定义:int fcntl(int fd, int cmd, … /* arg */ );
参数: cmd 取值 F_GETLK, F_SETLK 和 F_SETLKW ,分别表示获取锁、设置锁(不等待,失败就失败)和同步设置锁(会进行阻塞,等待).文件锁的表示 struct flock // struct flock 结构体说明 struct flock { short l_type; /*F_RDLCK, F_WRLCK, or F_UNLCK */ off_t l_start; /*offset in bytes, relative to l_whence */ short l_whence; /*SEEK_SET, SEEK_CUR, or SEEK_END */ off_t l_len; /*length, in bytes; 0 means lock to EOF */ pid_t l_pid; /*returned with F_GETLK */ 查看是上锁的是哪一个进程id }; 那么l_start表示从文件当前指针位置开始计算的偏移值,如果为SEEK_END,那么l_start为从文件尾向前移动的偏移值。 SEEK_CUR当前开始偏移 l_type: 第一个成员是加锁的类型:只读锁,读写锁,或是解锁。 l_start和l_whence: 用来指明加锁部分的开始位置。 l_len: 是加锁的长度。0的话锁到结尾的部分 l_pid: 是加锁进程的进程id。 举例: 我们现在需要把一个文件的前三个字节加读锁,则该结构体的l_type=F_RDLCK, l_start=0, l_whence=SEEK_SET, l_len=3, l_pid不需要指定,然后调用fcntl函数时, cmd参数使F_SETLK.