前言:线程如何同步应该知道了吧?不知道也没关系,可以参考我的这篇博客:upload/201809261649267581.gif" alt="" style="border: 0px; vertical-align: middle; padding-right: 5px; max-width: 900px; height: auto;" /> View Code
新增AI编程课程,引领技术教育新趋势
前言:线程如何同步应该知道了吧?不知道也没关系,可以参考我的这篇博客:upload/201809261649267581.gif" alt="" style="border: 0px; vertical-align: middle; padding-right: 5px; max-width: 900px; height: auto;" /> View Code
文件锁的实现主要就是通过fcntl函数来实现的,所以先来介绍这个函数。
功能:借助 fcntl函数来实现锁机制。 操作文件的进程没有获得锁时,可以打开,但无法执行read、write操作。
原型:int fcntl(int fd, int cmd, ... /* arg */ );
参数说明:
参数1:文件描述符
参数2:
F_SETLK (struct flock *) 设置文件锁(相当于trylock,不成功直接返回)
F_SETLKW (struct flock *) 设置文件锁(相当于lock,不成功一直阻塞)W --> wait
F_GETLK (struct flock *) 获取文件锁
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)
...
};
程序如下:
View Code
总结:喜欢的帮忙推荐一下,在此谢过了;欢迎评论,交流与学习
-------------------------------------------
个性签名:独学而无友,则孤陋而寡闻。做一个灵魂有趣的人!
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
万水千山总是情,打赏一分行不行,所以如果你心情还比较高兴,也是可以扫码打赏博主,哈哈哈(っ•̀ω•́)っ✎⁾⁾!https://www.cnblogs.com/liudw-0215/p/9705390.html