如何实现开放的 stdio 系统调用包装器



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

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

它没有。

每当实现看到 O_CREAT 标志时,它将计算第三个参数。如果你没有传递第三个参数,行为是未定义的,就像你对printf的参数撒谎一样(例如,传递%s作为格式字符串,但忘记实际传递要插入的字符串)。

相关内容

  • 没有找到相关文章

最新更新