当前位置:  技术问答>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进制看也差不多。
#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
 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 
}

    
 
 

您可能感兴趣的文章:

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












  • 相关文章推荐
  • java命名空间javax.lang.model.type枚举typekind的类成员方法: int定义及介绍
  • 这个构造函数new String(byte[],int,int,int)怎麽用?谢谢!
  • java命名空间java.awt.image类databuffer的类成员方法: type_int定义及介绍
  • 我是初学者,问一个比较傻的问题:既然JAVA是一种纯面向对象的语言,那么为什么int i=new int()或int i=new int(1)不能通过编译?谢谢。
  • java命名空间java.awt.image类bufferedimage的类成员方法: type_int_argb_pre定义及介绍
  • void(*signal(int signo,void(*func)(int)))(int)又有问题了
  • java命名空间java.awt.image类bufferedimage的类成员方法: type_int_rgb定义及介绍
  • 在纯C当中是否支持多态,例如int abc(int a);int abc(char b);系统会根据不同的参数类型,调用不同的函数
  • java命名空间java.awt.image类bufferedimage的类成员方法: type_int_argb定义及介绍
  • invalid conversion from `int (*)(int)' to `void (*)(int)',这个怎么转换
  • java命名空间java.awt.image类bufferedimage的类成员方法: type_int_bgr定义及介绍
  • void(*signal(int signo,void(*func)(int)))(int)
  • 怎么确定 socket(int domain, int type, int protocol) 三个参数?
  • 请问一下,有谁知道linux源代码中socket(int domain, int type, int protocol);函数的定义是在哪个文件中啊?小弟我找了很久,都没找到,谢谢哈。
  • c#中(int)、int.Parse()、int.TryParse、Convert.ToInt32的区别详解
  • 无法从 int? 转换为 int 运行时出现错误
  • Integer test(Integer i)=Int test(Int i) ??
  • 比如一个"123456" 如何转化成 int类型然后和int型比较
  • int/int,如何得到小数,菜问题:)
  • 在jsp中<%! int i = 1 %>与<% int i = 1 %>2个声明有什么区别
  • 内核代码中的: int reboot(int flag) 这个函数在哪里?


  • 站内导航:


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

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3