关于open操作的O_EXCL的存在应用价值理解
来源:互联网 发布:淘宝运费险是自动退吗 编辑:程序博客网 时间:2024/05/20 08:01
在我最近学习Linux C的过程中 总是看到这样的打开方式 open(const* pathname,O_CREAT|O_EXCL);
O_CREAT 简单 就是想打开的文件如果不存在的话就会自动创建文件
而 O_EXCL 他的作用就是如果要创建一个文件 并且这个文件已经存在的话 会直接返回 并且 如果打开的文件是符号链接文件的话 也会直接返回
一开始真的感觉莫名其妙
之后搜了一下才知道自己的菜逼思维
如果不加O_EXCL 的话 如果文件存在 那么这个文件依旧会被打开
此时我们假设有这样的一个需求:某个任务只能单个进程处理执行 多进程会影响到该任务的执行
为了不让多进程打开处理这个文件 并且不用O_EXCL的话
可能会这样写
if( access(file, R_OK) == -1 ) /* 首先检查文件是否存在 */
open(file, O_RDWR | O_CREAT,0666); /* 如果不存在,那我创建一个这样的文件 */
... /* 继续执行任务 */
其实这个逻辑存在一个潜在性错误的
如果当我的进程1执行了access并判断这个文件并不存在 由于操作系统关于多进程的调度策略 若此时进程1暂停 进程2执行 那么进程2也会判定这个文件不存在
结果自然是有两个进程会打开这个文件 这与我们的目标相违背
而相对的 如果我们用了 O_EXCL 我们就把判断和创建放在了一起 就能避免这个错误的发生
--------------- 一个小白的粗浅理解,欢迎指出错误
另外说个题外的内容 傻逼了 看这些源代码的时候一直看到 errno 的判断 然后就傻兮兮的去记所有的错误代码 记到恶心
然后有个煞笔告诉我直接 对 errno.h grep 不就好了
恍然大悟 我真是个智障
- 关于open操作的O_EXCL的存在应用价值理解
- open函数的O_CREAT与O_EXCL
- open系统调用的O_CREAT和O_EXCL
- O_EXCL的作用(原子操作)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- open中O_EXCL选项的介绍与分析
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- Unix/Linux下的open函数(O_CREAT和O_EXCL)
- 软件存在的价值
- 存在的价值
- 引用的存在价值
- O_EXCL的作用
- O_EXCL的作用
- O_CREAT | O_EXCL的作用
- 举例说明关于 Lua闭包 的存在价值
- 举例说明关于 Lua闭包 的存在价值
- 代码生成器的存在价值
- 2016/09/19 21:33
- 九种基本数据类型的大小,以及他们的封装类
- 从上往下打印二叉树
- HDU1530 Maximum Clique & ZOJ 1492 Maximum Clique
- javascript--函数总结
- 关于open操作的O_EXCL的存在应用价值理解
- [leetcode]Tow Sum(java)
- hdu5894组合数学
- hdu1495 非常可乐(规律)
- bzoj4538: [HNOI2016]网络
- c++ 函数
- 类,面和对象
- light oj 1005 - Rooks (组合数学)
- 优秀程序员的本质