为什么我们使用FILE *代替FILE进行I / O.

时间:2013-02-17 12:54:48

标签: c visual-c++ gcc cross-platform c99

今天我正在学习有关C的标准I / O的事情。当我打开stdio.h文件时发现:

typedef struct _iobuf FILE;

当检查struct _iobuf的定义时发现:

struct _iobuf {
    char *_ptr;
    int   _cnt;
    char *_base;
    int   _flag;
    int   _file;
    int   _charbuf;
    int   _bufsiz;
    char *_tmpfname;
};

为了了解更多,我已经说明了每一个是否正确

struct _iobuf {
    char *_ptr;      /* next character position */
    int   _cnt;      /* characters left */
    char *_base;     /* location of buffer */
    int   _flag;     /* File status flags */
    int   _file;
    int   _charbuf;   /*Data transfer buffer */
    int   _bufsiz;    /* Buffer size */
    char *_tmpfname;  /* Temporary file indicator */
};

现在我脑子里有两个问题?

问题1:我是否提供了正确的名称以及I / O中的结构如何帮助,如果我添加或删除任何会发生的事情?那会有相应的效果吗?这里提供的顺序是否重要?

Q2:这里没有使用指针,但为什么要使用FILE *打开文件?

3 个答案:

答案 0 :(得分:5)

  

我是否提供了正确的姓名?

这些都是特定于Microsoft实现的内部详细信息,以及未记录的AFAIK。

  

如果我添加或删除任何会发生的事情?

那真的很糟糕;您可能会导致未定义的行为

  

此处没有使用指针,但为什么要使用FILE *打开文件?

因为从应用程序代码的角度来看,实现细节并不重要; FILE *旨在成为opaque pointer

答案 1 :(得分:4)

A1。编辑标准标题会导致未定义的行为。

A2。结构通常作为C中的指针传递,以避免复制。此外,它意味着充当句柄或不透明指针。

更大的问题是为什么要做任何你想要的事情。

答案 2 :(得分:0)

回答你的所有问题:

The Standard C Library by P.J. Plauger