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

问《UNIX环境高级编程》里一个小问题

    来源: 互联网  发布时间:2016-03-08

    本文导语:  今天在《UNIX环境高级编程》里面看到这么一段话:三个访问方式标志(O_RDONLY,O_WRONLY,O_RDWR)并不各占一位(正如前述,这三种标志的值分别是0、1、2,由于历史原因。这三种值互斥——一个文件只能有这三种值之一)...

今天在《UNIX环境高级编程》里面看到这么一段话:三个访问方式标志(O_RDONLY,O_WRONLY,O_RDWR)并不各占一位(正如前述,这三种标志的值分别是0、1、2,由于历史原因。这三种值互斥——一个文件只能有这三种值之一)。因此首先必须用屏蔽字O_ACCMODE取得访问模式位,然后讲结果与这三种值中的任一种做比较。
我不是很理解这句话的意思,希望有朋友能帮我解答一下。非常感谢!

|
书上的例子不是已经说的很清楚了么?
就是说用flags = fcntl(fd, F_GETFL, 0)后
不能用位与的方法 if (flags & O_RDONLY)的来判断文件的只读标志.
要用if ( (flags & O_ACCMODE) == O_RDONLY)来判断;
而其他的标志, 如 O_NONBLOCK, O_APPEND等是每个标志占一位的, 所以可以直接用位与的方法来判断:
如 if (flags & O_NONBLOCK) 可以判断文件描述符是否为非阻塞的.

/* open-only flags */
#define O_RDONLY        0x0000          /* open for reading only */
#define O_WRONLY        0x0001          /* open for writing only */
#define O_RDWR          0x0002          /* open for reading and writing */
#define O_ACCMODE       0x0003          /* mask for above modes */

#if __BSD_VISIBLE
#define FREAD           0x0001
#define FWRITE          0x0002
#endif
#define O_NONBLOCK      0x0004          /* no delay */
#define O_APPEND        0x0008          /* set append mode */
#if __BSD_VISIBLE
#define O_SHLOCK        0x0010          /* open with shared file lock */
#define O_EXLOCK        0x0020          /* open with exclusive file lock */
#define O_ASYNC         0x0040          /* signal pgrp when data ready */
#define O_FSYNC         0x0080          /* synchronous writes */
#endif
#define O_SYNC          0x0080          /* POSIX synonym for O_FSYNC */
#if __BSD_VISIBLE
#define O_NOFOLLOW      0x0100          /* don't follow symlinks */
#endif
#define O_CREAT         0x0200          /* create if nonexistent */
#define O_TRUNC         0x0400          /* truncate to zero length */
#define O_EXCL          0x0800          /* error if already exists */
#ifdef _KERNEL
#define FHASLOCK        0x4000          /* descriptor holds advisory lock */
#endif

/* Defined by POSIX 1003.1; BSD default, but must be distinct from O_RDONLY. */
#define O_NOCTTY        0x8000          /* don't assign controlling terminal */

#if __BSD_VISIBLE
/* Attempt to bypass buffer cache */
#define O_DIRECT        0x00010000
#endif


|
fcntl用F_GETFL返回的文件状态标志除了O_RDONLY,O_WRONLY和O_RDWR外还有其它标志,如O_APPEND,O_NONBLOCK,O_SYNC和O_ASYNC,这些也是关于读写方式的(阻塞或非阻塞,异步等等)。。

    
 
 

您可能感兴趣的文章:

  • 高级UNIX编程和UNIX环境高级编程是不是一本书
  • 读过 Unix网络编程 或者 熟知Unix网络编程的 的进来看一下
  • 想看linux内核源代码,另外手头上有一本《unix环境高级编程》,需要先把《unix环境高级编程》看完之后再看内核吗?
  • 我下载了UNIX环境高级编程的源码,可是打开时有错误,怎么才可以打开?还有谁有《UNIX环境高级编程(英文版)》的chm格式的ebook?
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • 想学linux下程序开发,不知道买哪本书好《UNIX环境高级编程》(中文第一版)还是《UNIX环境高级编程》(英文第二版)
  • unix编程与linux编程有什么区别?
  • [学习UNIX编程]初学UNIX编程,遇到一个小小的问题,烦劳大虾帮忙解惑,谢谢!
  • 看Unix环境高级编程,提到了V和bsd,有很多不同,但是没有提到Linux,请问linux跟BSD或者unix V 编程细节哪些不同的,特别是线程,进程,和socke
  • 博客 iis7站长之家
  • 我初学 Unix 编程,在看《Unix环境高级编程》时有一个问题请指教。
  • 我学&用Linux编程,手里有《UNIX环境高级编程》,看它行吗?
  • 谁有介绍UNIX下面函数的书啊,类似UNIX编程参考手册的东西
  • UNIX编程艺术,了解unix文化强烈推荐这本书
  • UP有分,推荐几本书给我吧,兄弟们,UNIX入门与编程的与编程的,
  • 学Linux编程前要学Unix吗?哪里有学Linux编程的好书下载?
  • 入门问题,我想向UNIX编程方向发展,单目前不会UNIX,我该如何做
  • 请问:如果懂unix编程,那么会懂linux编程吗?一般来说:它们有什么关系呢?
  • 都说《UNIX环境高级编程》好,对于学linux编程好不好?是那个出版社的,是中文版吗?
  • 学习UNIX编程应该从那里入手?
  • 因进修,需要学习《Unix 环境高级编程》一书,完全没接触过Unix/Linux,请推荐一个学习环境。
  • 急,《UNIX环境高级编程》中6.9 环境变量T Z是什么?
  • Java在unix环境下的应用?急、急、急...
  • 关于UNIX下的环境变量的设定
  • unix环境高级编程 VS linux程序设计,买哪本?
  • unix环境高级编程
  • 各位大侠,请推荐几本在UNIX环境下使用标准C语言编程的好书.谢谢啊!!!
  • 有没有什么工具可以在windows环境下生成unix用的.so文件
  • 在SCO UNIX 5。0。5下,如何安装C编译环境?
  • 大家好!如何在UNIX环境下建立WEB服务器?用什么软件?
  • <unix环境高级编程>该怎么看?
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • UNIX特急!!!digital unix问题,请专家快来!!!
  • 小问题, Unix 如何建立一个文件 ,unix 文件有后缀名吗
  • unix下的非常的奇怪WC的问题,向unix高手请教 好急呀!!!!!!!!!!!!!!!
  • 菜鸟问题:现在要做unix下的c/c+编程的几个问题?
  • unix下jdk配置问题及发布问题.
  • UNIX的一个初级问题
  • 关于UNIX文件I/O操作的问题,解决问题立即结贴
  • 新手,请教安装SCO Unix的问题
  • unix使用问题
  • 安装UNIX问题
  • Unix与windows的共存问题。
  • unix下发email问题
  • unix下编译问题
  • 一个关于安装SCO UNIX的问题
  • UNIX跟98安装问题
  • 关于unix系统安全问题!急!!!
  • linux和unix问题,望高手指教
  • 安装Unix时遇到的问题求教
  • sco unix5.06安装问题
  • 简单问题关于SCO UNIX
  • java命名空间java.util.regex类pattern的类成员方法: unix_lines定义及介绍
  • 关于UNIX的历史 : 1973年,K.Thompson和D.M.ritchie,用C改写UNIX。那么,在此之前,UNIX是用什么写的?
  • unix/Linux下c++ boost thread库读写锁介绍
  • 没有unix系统我如何学习unix
  • php将标准字符串格式时间转换成unix时间戳_strtotime
  • unix盘哪里有下载的??哪里有比较好的unix论坛??万分感谢!!!!!!!!!
  • php将unix时间戳转换成字符串时间函数(date)
  • 急!装完unix5.06,再装win2000。重启后不能进unix.
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • UNIX支持中文否,请推荐UNIX好书
  • SCO UNIX 5.0用软盘启动之后无法启动UNIX


  • 站内导航:


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

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

    浙ICP备11055608号-3