【问题标题】:How stdio system call wrapper of open implemented?如何实现 open 的 stdio 系统调用包装器?
【发布时间】:2013-10-31 08:32:23
【问题描述】:

open() 是 POSIX 原型中的可变长度参数函数,当调用两个参数版本时 mode=0。当标志中设置了 O_CREAT 位时,第三个参数模式有效。

我无法得到的是: 当调用 open(fname, flags) 时包装器会做什么,其中 flags 包含 O_CREAT,换句话说,包装器如何知道我没有传递第三个参数模式,因为 va_arg 无法确定是否有参数传递给并且只有一个版本的 open 因为它是 C 函数?

【问题讨论】:

    标签: linux posix system-calls stdio


    【解决方案1】:

    没有。

    只要看到O_CREAT 标志,实现就会评估第三个参数。如果您没有传递第三个参数,则行为未定义,这与您对printf 对其参数撒谎的方式非常相似(例如,将%s 作为格式字符串传递,但忘记实际传递一个字符串插入)。

    【讨论】:

      猜你喜欢
      • 2011-07-11
      • 2015-06-02
      • 2011-04-09
      • 1970-01-01
      • 2015-01-06
      • 1970-01-01
      • 2010-10-10
      • 2012-09-28
      • 2012-10-21
      相关资源
      最近更新 更多