1 /*
2 头文件:#include<fcntl.h> #include<unistd.h>
3 原型:int fcntl(int fildes, int cmd, ...);
4 int fcntl(int fildes,int cmd,struct flock *flags);
5 fildes:文件描述符
6 cmd:
7 F_SETLK: 设置文件锁(尝试获取,不阻塞)
8 F_SETLKW: 设置文件锁(阻塞等待)
9 F_GETLK: 获取文件锁
10
11 sturct flock{ //修改文件锁的属性
12 short l_type 文件锁的类型:读锁,写锁,解锁
13
14 short l_whence 文件光标定位:文件头,文件尾,文件当前光标
15
16 off_t l_start 文件偏移量
17
18 off_t l_len 文件上锁的字符长度(设置0时,整个文件都加锁)
19
20 pid_t l_pid 获取当前锁的进程pid(只有参数2使用F_GETLK)
21 };
22 返回值:成功返回0;失败返回错误号
23 作用:进程间对文件上锁(写时独占,读时共享,写优先级高)
24
25
26 eg:
27 //定义文件锁属性的结构体
28 struct flock f_lock;
29 //设置文件锁属性
30 f_lock.l_type=F_WRLCK; 写锁
31 f_lock.l_whence=SEEK_SET; 光标定位在文件投
32 f_lock.start=0; 文件偏移量为0
33 f_lock.l_len=0; 文件上锁的字符长度为整个文件
34 f_lock.l_pid; 文件锁的进程pid(一般不设置)
35
36 fcntl(fd,F_SETLKW,&f_lock); 上锁
37
38 f_lock.l_type=F_UNLCK; 解锁
39 fcntl(fd,F_SETLKW,&f_lock);
40
41 注意:上锁前需要open打开文件获得fd文件描述符
42 */
多线程无法使用文件锁