2

今天我正在学习关于 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 */
};

现在有两个问题在我的脑海里?

Q1:我是否提供了正确的名称以及结构如何帮助 I/O,如果我添加或删除任何东西会发生什么?这会相应地工作吗?这里提供的顺序重要吗?

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

4

3 回答 3

5

我提供了正确的名称吗?

这些都是特定于 Microsoft 实施和 AFAIK 的内部细节,未记录在案。

如果我添加或删除任何东西会发生什么?

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

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

因为从应用程序代码的角度来看,实现细节并不重要;FILE *旨在成为一个不透明的指针

于 2013-02-17T12:57:04.750 回答
4

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

A2。结构通常在 C 中作为指针传递以避免复制。此外,它还可以用作句柄或不透明的指针。

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

于 2013-02-17T12:58:21.423 回答
0

您所有问题的答案:

PJ Plauger 的标准 C 库

于 2013-02-17T15:51:03.713 回答