当前位置: 技术问答>linux和unix
int flags = O_CREAT | O_TRUNC | O_WRONLY
来源: 互联网 发布时间:2016-07-15
本文导语: 请问上式什么意思?我在学习文件打开函数open()时遇到的问题。三者按位或得到的flags最终的值为多少?谢谢! | 来看看这些常数的定义,在/usr/include/bits/fcntl.h 注意里面的0100等常数都是0开头...
请问上式什么意思?我在学习文件打开函数open()时遇到的问题。三者按位或得到的flags最终的值为多少?谢谢!
|
来看看这些常数的定义,在/usr/include/bits/fcntl.h
注意里面的0100等常数都是0开头的8进制数,如果不熟悉8进制就当16进制看也差不多。
可以看出,每个常数都对应一位。所以不必关心三者按位或得到的flags最终的值为多少。
每多或上一个常数,就是把对应的一位置1。
注意里面的0100等常数都是0开头的8进制数,如果不熟悉8进制就当16进制看也差不多。
#define O_ACCMODE 0003
#define O_RDONLY 00
#define O_WRONLY 01
#define O_RDWR 02
#define O_CREAT 0100 /* not fcntl */
#define O_EXCL 0200 /* not fcntl */
#define O_NOCTTY 0400 /* not fcntl */
#define O_TRUNC 01000 /* not fcntl */
#define O_APPEND 02000
#define O_NONBLOCK 04000
#define O_NDELAY O_NONBLOCK
#define O_SYNC 010000
#define O_FSYNC O_SYNC
#define O_ASYNC 020000
可以看出,每个常数都对应一位。所以不必关心三者按位或得到的flags最终的值为多少。
每多或上一个常数,就是把对应的一位置1。
|
if you want to know the value of 'O_CREAT | O_TRUNC | O_WRONLY'
you can
you can
int a = O_CREAT | O_TRUNC | O_WRONLY;
printf("O_CREAT | O_TRUNC | O_WRONLY = %dn", a);
|
这种设置标志的方法在操作系统或者驱动代码里会经常用到。
我想,在open函数里面,对于几个标志或运算的最后结果,不会按照一个整数来处理,或者说不会关心他的值,只会把它按位拆开,判断其中哪些位是1。
代码应该是类似这样:
if (flags & O_CREAT)
{
// O_CREAT被置1
}
我想,在open函数里面,对于几个标志或运算的最后结果,不会按照一个整数来处理,或者说不会关心他的值,只会把它按位拆开,判断其中哪些位是1。
代码应该是类似这样:
if (flags & O_CREAT)
{
// O_CREAT被置1
}
您可能感兴趣的文章:
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。