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的区分是不准确的。