阿普说
使用fdopen时,类型参数的含义略有不同。
描述符已被打开,因此打开进行写入
不是截短文件。(如果描述符是由
例如,函数已经存在,
OúTRUNC fleag将控制文件是否被截断。这个
fdopen函数不能简单地截断它为写入而打开的任何文件。)
此外,标准I/O追加模式无法创建文件(因为
如果描述符引用它,则必须存在。
通常,当我们对从fdopen()返回的文件描述符调用open()时,
我们可以在fdopen()中指定哪些类型?
fdopen()中指定的类型必须与open()中指定的模式完全相同吗?
fdopen()中指定的类型是否可以是open()中指定的模式的子集、超集或既不是子集也不是超集?
如果在fdopen()中指定的类型相对于前一个open()中指定的模式没有限制,那么在fdopen()中指定的类型的哪个部分是有效的,而哪个部分不是(即被忽略)?
谢谢。

最佳答案

POSIX指定:
应用程序应确保由mode参数表示的流模式被fildes引用的打开文件描述的文件访问模式所允许。
基本原理部分更进一步:
modefdopen()fopen()参数的含义不同。对于fdopen(),open for write(ww+)不截断,append(aa+)不能创建用于写入。允许包含modeb参数格式与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/

10-08 21:42