美文网首页程序员
open()参数oflag与fopen()参数mode

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

作者: Rying7 | 来源:发表于2017-06-26 15:43 被阅读0次

    研究背景

          最近项目需求,某个小点需要知道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的区分是不准确的。





    相关文章

      网友评论

        本文标题:open()参数oflag与fopen()参数mode

        本文链接:https://www.haomeiwen.com/subject/ifhjcxtx.html