FILE对象通常由a创建 调用fopen或tmpfile,其中 两者都返回一个引用 这些对象。
Struct名为FILE的属性是什么,还是依赖于平台?
答案 0 :(得分:2)
FILE
是一种依赖于平台的类型,很可能是struct
,最终包含或指向至少:
char
或wchar_t
方向; ungetc
放入流中的最后一个字符。如果我没有忘记任何事情,那么您可以使用stdio
函数访问这些函数,这些函数构成了FILE
对象使用和检查的唯一界面。由于FILE
是不透明的,因此您不应该知道 如何保留所有这些信息。
POSIX另外指定您可以使用fileno
函数/宏检索基础文件描述符。
答案 1 :(得分:2)
答案是它取决于平台。至少在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的文件结构不同。
答案 2 :(得分:1)
来自C语言标准草案n1256,第7.19.1段,第2段:
声明的类型是size_t
(在7.17中描述);
FILE
这是一种能够记录控制所需信息的对象类型 流,包括其文件位置指示符,指向其关联缓冲区(如果有)的指针,a 记录是否发生读/写错误的错误指示符,以及记录是否已到达文件末尾的文件结尾指示符;和
fpos_t
这是一种除了能够记录所有信息的数组类型之外的对象类型 需要唯一地指定文件中的每个位置。
FILE类型的确切内容是依赖于实现的,并不意味着直接访问。
答案 3 :(得分:0)
快速回答 - 对不起。
FILE是一个句柄,而不是一个结构。它基本上表示对要读取或写入的文件的锁定。
我建议阅读有关fopen电话的帮助,例如,有很多在线帮助。
希望这有助于。