open()参数oflag与fopen()参数mode


研究背景

      最近项目需求,某个小点需要知道oflag与mode的对应关系(把oflag转换成mode),这也是比较简单解决的一个点吧,顺便看看源代码便可学习学习。

思考过程

      我们知道,fopen函数最终调用的便是open函数,查看下fopen.c 的源代码.

fopen源码

从画线处可以看出,oflags与mode的转换是由__sflags()函数转换而来,Google得到函数的源码 flags.c

__sflags源码

有了上面的对应关系,两者之间的关系就比较清楚了,由一个switch语句控制,最终由 *optr = m | o 运算,由此完成了从mode到oflag的转换。下面我们手动验证一下。

验证过程

验证函数
main函数

输出的结果如图:

输出结果

从结果可知,__sflags函数对+/b的操作结果是一致的,即忽略了"b"带来的影响。

产出

    我们最终的目的是从oflags转换成mode,有了以上的结果对应,那么相对来说就比较简单了,直接是一个switch语句的控制即可,但是,对于+/b的区分是不准确的。





最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 一、php可以做什么 php是一种可以在服务器端运行的编程语言,可以运行在Web服务器端。 php是一门后台编程语...
    空谷悠阅读 8,322评论 4 97
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,981评论 18 399
  • 教程一:视频截图(Tutorial 01: Making Screencaps) 首先我们需要了解视频文件的一些基...
    90后的思维阅读 10,273评论 0 3
  • 你所删除的,都是你自己的人生 ——The Social Network @...
    包包Tera阅读 2,865评论 0 0
  • 上周帮人改英文文章,为了凑字数把孔子他老人家搬出来了,试图给老外打一张“文化牌”。 刚才翻到以前读论语的一些笔记,...
    梅西西zzz阅读 4,268评论 0 0