阿普说
使用fdopen时,类型参数的含义略有不同。
描述符已被打开,因此打开进行写入
不是截短文件。(如果描述符是由
例如,函数已经存在,
OúTRUNC fleag将控制文件是否被截断。这个
fdopen函数不能简单地截断它为写入而打开的任何文件。)
此外,标准I/O追加模式无法创建文件(因为
如果描述符引用它,则必须存在。
通常,当我们对从fdopen()
返回的文件描述符调用open()
时,
我们可以在fdopen()
中指定哪些类型?fdopen()
中指定的类型必须与open()
中指定的模式完全相同吗?fdopen()
中指定的类型是否可以是open()
中指定的模式的子集、超集或既不是子集也不是超集?
如果在fdopen()
中指定的类型相对于前一个open()
中指定的模式没有限制,那么在fdopen()
中指定的类型的哪个部分是有效的,而哪个部分不是(即被忽略)?
谢谢。
最佳答案
POSIX指定:
应用程序应确保由mode
参数表示的流模式被fildes
引用的打开文件描述的文件访问模式所允许。
基本原理部分更进一步:mode
和fdopen()
的fopen()
参数的含义不同。对于fdopen()
,open for write(w
或w+
)不截断,append(a
或a+
)不能创建用于写入。允许包含mode
的b
参数格式与isoc标准函数fopen()
保持一致。b
对结果流没有影响。尽管本卷IEEE Std 1003.1-2001没有明确要求,但是append(a
)模式的良好实现将导致设置O_APPEND
标志。
由于文件描述符可以以多种方式打开(open()
,socket()
,等等),并且可以有具有不同限制的自定义设备驱动程序,因此实际上不可能提供open()
模式和fdopen()
模式之间关系的通用规范。
但是,可以很安全地假设,如果文件描述符是为写入而打开的,那么您应该能够使用modew
,如果它是为读取而打开的,那么您可以使用moder
。
关于c - 我们可以在`fdopen()`中指定哪些类型,并且该类型的哪一部分有效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52103489/