0

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

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

4

1 回答 1

1

它没有。

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

于 2013-10-31T09:06:10.933 回答