FILE类型的对象的属性是什么

FILE对象通常是通过调用fopen或tmpfile创建的,它们都返回对这些对象之一的引用。

Struct名为FILE的属性是什么,还是依赖于平台?

答案是它依赖于平台。 至少在Linux上使用glibc, FILE实际上是_IO_FILE中的一个typedef,它在libio.h实现:

 struct _IO_FILE { int _flags; /* High-order word is _IO_MAGIC; rest is flags. */ #define _IO_file_flags _flags /* The following pointers correspond to the C++ streambuf protocol. */ /* Note: Tk uses the _IO_read_ptr and _IO_read_end fields directly. */ char* _IO_read_ptr; /* Current read pointer */ char* _IO_read_end; /* End of get area. */ char* _IO_read_base; /* Start of putback+get area. */ char* _IO_write_base; /* Start of put area. */ char* _IO_write_ptr; /* Current put pointer. */ char* _IO_write_end; /* End of put area. */ char* _IO_buf_base; /* Start of reserve area. */ char* _IO_buf_end; /* End of reserve area. */ /* The following fields are used to support backing up and undo. */ char *_IO_save_base; /* Pointer to start of non-current get area. */ char *_IO_backup_base; /* Pointer to first valid character of backup area */ char *_IO_save_end; /* Pointer to end of non-current get area. */ struct _IO_marker *_markers; struct _IO_FILE *_chain; int _fileno; #if 0 int _blksize; #else int _flags2; #endif _IO_off_t _old_offset; /* This used to be _offset but it's too small. */ #define __HAVE_COLUMN /* temporary */ /* 1+column number of pbase(); 0 is unknown. */ unsigned short _cur_column; signed char _vtable_offset; char _shortbuf[1]; /* char* _save_gptr; char* _save_egptr; */ _IO_lock_t *_lock; #ifdef _IO_USE_OLD_IO_FILE }; 

正如马丁约克在评论中所说,你并不是要知道这种结构的内部结构。 结构的这种特定定义不保证在实现中是相同的; 我希望MSVC的文件结构不同。

FILE是一个依赖于平台的类型,很可能是一个struct ,最终包含或指向至少:

  1. 打开文件中的两个偏移,一个用于读取,一个用于写入;
  2. 是打开文件进行阅读,写作还是两者兼而有之;
  3. 是否为二进制或文本I / O打开文件;
  4. 流的EOF /错误状态;
  5. 缓冲;
  6. 表示块缓冲或行缓冲的标志;
  7. charwchar_t orientation;
  8. ungetc放入流中的最后一个字符。

如果我没有忘记任何事情,那么您可以使用stdio函数访问这些函数,这些函数构成了使用和检查FILE对象的唯一接口。 由于FILE是不透明的,你不应该知道它如何保存所有这些信息。

POSIX另外指定您可以使用fileno函数/宏检索基础文件描述符。

来自C语言标准的n1256草案,§7.1.1.1,第2段:

声明的类型是size_t (在7.17中描述);

FILE

这是一种能够记录控制流所需的所有信息的对象类型,包括其文件位置指示符,指向其相关缓冲区的指针(如果有),记录是否发生读/写错误的错误指示符 ,以及文件结束指示器,记录是否已到达文件的末尾; 和

fpos_t

这是一种除arrays类型之外的对象类型,能够记录唯一指定文件中每个位置所需的所有信息。

FILE类型的确切内容是依赖于实现的,并不意味着直接访问。

快速回答 – 抱歉。

FILE是一个句柄,而不是一个结构。 它基本上代表了对要读取或写入的文件的锁定。

我建议阅读有关fopen呼叫的帮助,例如,有很多在线帮助。

希望这有助于。