C中的FILE关键字到底是什么?

| 我已经开始学习一些C语言,并将它当作一种业余爱好,并且很长一段时间以来都盲目地使用FILE作为文件指针的声明,我一直在想。这是C用来处理文件的关键字或特殊数据类型吗?它是否包含文件内的流以及其他数据?为什么将其定义为指针? 一个例子来说明我的意思,使其更加清楚:
FILE* fp; //<-- this
fp = fopen(\"datum.txt\", \"r\");

while(!feof(fp)) {
   // etc.
}
    
已邀请:
  这是C用来处理文件的关键字或特殊数据类型吗? 您所指的是标准io库使用的typedef结构,用于保存使用fopen及其函数系列的适当数据。   为什么将其定义为指针? 使用指向结构的指针,然后可以将其作为参数传递给函数。例如,这是fgets或fgetc将接受的形式,为
function(FILE* fp)
fopen函数将返回一个指向新创建的FILE结构的指针,将此新指针分配给未使用的指针将导致它们指向同一对象。   它是否包含文件内的流以及其他数据? 结构定义似乎比其描述更虚幻。这直接来自我的stdio.h,来自MinGW32 5.1.4
typedef struct _iobuf
{
    char*   _ptr;
    int _cnt;
    char*   _base;
    int _flag;
    int _file;
    int _charbuf;
    int _bufsiz;
    char*   _tmpfname;
} FILE;
其中包括前面的可爱评论:   有些人认为,任何在其正确思想中的人都不应利用    内部结构。 该结构的内容在其他实现上似乎发生了很大变化,glibc源通常具有某种形式的注释,但是为此的结构被大量代码掩埋了。 请注意上述警告,而不用担心它会做什么。 :)     
“ 3”是用作typedef名称的标识符,通常用于“ 4”。 stdio库通常具有类似
typedef struct {
   ...
} FILE;
某处。所有处理FILE指针的stdio函数都知道
...
的内容,并且可以访问结构成员。 C程序员必须使用
fopen
feof
ferror
ungetc
等函数来创建和操作FILE结构。此类类型称为不透明(即您不能在其中窥视,但必须使用访问器函数)。   为什么将其定义为指针? 不是。这是您的代码声明指针的结构。请注意您的星号
FILE* fp;
这是为什么星号应使用变量标识符而不是类型名称的另一个示例:
FILE *fp;
    
它不是关键字,而是ANSI C标准中定义的用于处理文件的数据类型。它通常指向一个内部结构,该结构描述文件及其库功能的当前状态。     
这是一种特殊的数据类型。它包含文件句柄以及各种stdio调用内部使用的各种标志。您永远不需要真正知道其中的内容,只需知道它是可以传递的数据类型即可。 http://www.cplusplus.com/reference/clibrary/cstdio/FILE/ 但是,如果您对此感兴趣,则如下所示: http://en.allexperts.com/q/C-1587/2008/5/FILE-Structure.htm     

要回复问题请先登录注册