当前位置: 技术问答>linux和unix
请问文件状态标志里面的非阻塞模式是什么意思
来源: 互联网 发布时间:2016-07-06
本文导语: O_NONBLOCK ,在这个模式下,对应文件描述符的文件不可以干什么或者可以干什么。 还有我见很多程序修改文件状态标志都是这句 var |= flags。为什么不直接 var = flags 就可以了然后再 fcnlt(fd,F_SETFL,var).这样不就完...
O_NONBLOCK ,在这个模式下,对应文件描述符的文件不可以干什么或者可以干什么。
还有我见很多程序修改文件状态标志都是这句 var |= flags。为什么不直接 var = flags 就可以了然后再 fcnlt(fd,F_SETFL,var).这样不就完了么???
还有为什么如果要取消某种标志 用的是 var &= ~flags,这个是什么原理阿
还有我见很多程序修改文件状态标志都是这句 var |= flags。为什么不直接 var = flags 就可以了然后再 fcnlt(fd,F_SETFL,var).这样不就完了么???
还有为什么如果要取消某种标志 用的是 var &= ~flags,这个是什么原理阿
|
var &= ~flags
vc中取消某一个标志也是使用取反~,道理应该一样
vc中取消某一个标志也是使用取反~,道理应该一样
|
这些标志每个都对应一个二进制位,比如:
所以如果需要设置某个标志都需要
1、用F_SETFL先取得所有标志,
2、设置需要的标志,
3、用F_SETFL设置:
#define O_NONBLOCK 0x0004 /* no delay */
#define O_APPEND 0x0008 /* set append mode */
所以如果需要设置某个标志都需要
1、用F_SETFL先取得所有标志,
2、设置需要的标志,
3、用F_SETFL设置:
flag = fcntl(fd,F_GETFL);
flag |= O_NONBLOCK;
/* 清除某标志 */
/*
falg &= ~O_NONBLOCK;
*/
fcntl(fd, F_SETFL, flag);
|
笔误:
1、用F_SETFL先取得所有标志,
应为:
1、用F_GETFL先取得所有标志,
1、用F_SETFL先取得所有标志,
应为:
1、用F_GETFL先取得所有标志,
|
用的只是为了更改标识位
var |= flags
var &= ~flags
&= 位逻辑与赋值
|= 位逻辑或赋值
var |= flags
var &= ~flags
&= 位逻辑与赋值
|= 位逻辑或赋值