当前位置:  技术问答>linux和unix

O_EXCL到底有什么用?

    来源: 互联网  发布时间:2017-03-31

    本文导语:  目的:试图open一个文件,若文件不存在就创建它。 open(pathname, O_RDWR | O_CREAT,0666);就不行吗?为什么好多资料上说要加O_EXCL,说是原子性操作,不加难道就不是了吗?不解 | 如果文件事先已...

目的:试图open一个文件,若文件不存在就创建它。
open(pathname, O_RDWR | O_CREAT,0666);就不行吗?为什么好多资料上说要加O_EXCL,说是原子性操作,不加难道就不是了吗?不解

|
如果文件事先已经存在,
open(pathname, O_RDWR | O_CREAT,0666);  打开成功,返回一个大于0的fd
open(pathname, O_RDWR | O_CREAT | O_EXCL,0666); 打开失败,返回-1
楼主可以自己写几行代码验证一下。

|
我刚试了一下,用O_EXCL打开一个已经存在的文件,返回-1,errno是17
EEXIST      17  /* File exists */

|
$ man open
......
       O_EXCL Ensure that this call creates the file: if this flag is specified in  conjunc-
              tion  with  O_CREAT,  and pathname already exists, then open() will fail.  The
              behavior of O_EXCL is undefined if O_CREAT is not specified.

|
学一个API的时候应该多考虑一下他的应用场景.
这个O_EXCL就是一个表现了一个专属的语义. 确保创建一个文件的时候没有其它的同名文件,这样做有什么好处? 比如应用程序1依赖于并读写文件A, 而你写的程序2创建并依赖A, 那么程序2就干扰了程序1. 如果你创建文件的时候加O_EXCL, 那么程序直接报错,以提醒你更换一个文件名,以避免上述情况的发生. 


    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • open("a",O_CREATE|O_EXCL)中"|"的问题
  • 请问以 0|O_CREAT|O_EXCL ,方式建立的文件, 再次打开时, 为何返回失败呢 ? 谢谢 。


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,