程序员

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

2017-06-26  本文已影响0人  Rying7

研究背景

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





上一篇下一篇

猜你喜欢

热点阅读