open函数的flag详解2

《朱老师物联网大讲堂》学习笔记

学习地址:www.zhulaoshi.org

 

 

上节讨论的前提是文件存在,进而讨论那些内容,

那如果文件不存在呢?
当我们去打开一个并不存在的文件时,
就会文件打开错误的!

O_CREAT, 创建并打开,
fd = open("a.txt", O_RDWR | O_CREAT );
那如果文件存在,还这样做会怎杨?
试试,
原来的文件会被删除,然后重新创建一个,
说到这里,你又没发现这样做可能存在的隐患?

于是就有了这种用法,
fd = open( "a.txt", O_RDWR | O_CREAT | O_EXCL );
当文件存在时候,就会报错,
ps:这里创建出来的文件,权限和其它有些不一样,如何控制呢?
fd = open( "a.txt", O_RDWR | O_CREAT | O_EXCL ,0666 );
0666代表创建一个可读可写不可执行的文件,

O_NONBLOCK
阻塞有非阻塞,
调用一个阻塞式函数,那调用这个函数的进程可能被卡主,需要等待需要的条件具备才可能执行,
调用一个非阻塞式的函数,那调用这个函数会立即返回,不过它到底完成任务没,就不知道了,因为它不愿意等啊,
打开文件默认就是阻塞式的,如果想非阻塞就加O_NONBLOCK,
阻塞和非阻塞,是对设备文件来说的,普通文件没有这些。


       O_NONBLOCK or O_NDELAY
              When  possible, the file is opened in nonblocking mode.  Neither
              the open() nor any subsequent operations on the file  descriptor
              which  is  returned will cause the calling process to wait.  For
              the handling of FIFOs (named pipes), see also  fifo(7).   For  a
              discussion  of  the  effect  of  O_NONBLOCK  in conjunction with
              mandatory file locks and with file leases, see fcntl(2).


O_SYNC
操作系统层,有个缓冲区,
没有这个标志的时候,write只是将内容写入到底层的缓冲区,在合适的时候才会将buf中的内容,同步写入硬盘中,
如果不想等待,就加O_SYNC标志,

       O_SYNC The  file  is  opened for synchronous I/O.  Any write(2)s on the
              resulting file descriptor will block the calling  process  until
              the data has been physically written to the underlying hardware.
              But see NOTES below.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值