怎么做网站流量赚钱吗,wordpress根据喜好显示,网站建设需多少钱,导师微信赚钱只投资10元借助 fcntl函数来实现锁机制。 操作文件的进程没有获得锁时#xff0c;可以打开#xff0c;但无法执行read、write操作。 fcntl函数#xff1a; 获取、设置文件访问控制属性。 int fcntl(int fd, int cmd, ... /* arg */ ); 参2#xff1a; F_SETLK (struct flock *) 设置… 借助 fcntl函数来实现锁机制。 操作文件的进程没有获得锁时可以打开但无法执行read、write操作。 fcntl函数 获取、设置文件访问控制属性。 int fcntl(int fd, int cmd, ... /* arg */ ); 参2 F_SETLK (struct flock *) 设置文件锁trylock F_SETLKW (struct flock *) 设置文件锁lockW -- wait F_GETLK (struct flock *) 获取文件锁 参3 struct flock { ... short l_type; 锁的类型F_RDLCK 、F_WRLCK 、F_UNLCK short l_whence; 偏移位置SEEK_SET、SEEK_CUR、SEEK_END off_t l_start; 起始偏移1000 off_t l_len; 长度0表示整个文件加锁 pid_t l_pid; 持有该锁的进程ID(F_GETLK only) ... }; 进程间文件锁示例 多个进程对加锁文件进行访问 #include stdio.h
#include fcntl.h
#include unistd.hvoid sys_err(char *str)
{perror(str); exit(1);
}
int main(int argc, char *argv[])
{int fd;struct flock f_lock;if (argc 2) {printf(./a.out filename\n); exit(1);}if ((fd open(argv[1], O_RDWR)) 0)sys_err(open);//f_lock.l_type F_WRLCK; /*选用写琐*/f_lock.l_type F_RDLCK; /*选用读琐*/ f_lock.l_whence SEEK_SET;f_lock.l_start 0;f_lock.l_len 0; /* 0表示整个文件加锁 */fcntl(fd, F_SETLKW, f_lock);printf(get flock\n);sleep(10);f_lock.l_type F_UNLCK;fcntl(fd, F_SETLKW, f_lock);printf(un flock\n);close(fd); return 0;
} 运行结果 ubuntu1604ubuntu:~/wangqinghe/linux/20190821$ ./file_lock sem_pro.c get flock un flock 依然遵循“读共享、写独占”特性。但如若进程不加锁直接操作文件依然可访问成功但数据势必会出现混乱。 【思考】多线程中可以使用文件锁吗 多线程间共享文件描述符而给文件加锁是通过修改文件描述符所指向的文件结构体中的成员变量来实现的。 转载于:https://www.cnblogs.com/wanghao-boke/p/11389856.html