搜索
查看: 1505|回复: 7
打印 上一主题 下一主题

FILE类型的定义

[复制链接]
跳转到指定楼层
楼主
发表于 2014-10-3 21:20:15 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
5啊哈币
敝人在书上看到一些关于FILE数据类型的定义,大概看懂了那么一点点,但是打开stdio.h之后,看到这一段代码:
[mw_shl_code=c,true]/*
* The structure underlying the FILE type.
*
* Some believe that nobody in their right mind should make use of the
* internals of this structure. Provided by Pedro A. Aranda Gutiirrez
* <paag@tid.es>.
*/
#ifndef _FILE_DEFINED
#define        _FILE_DEFINED
typedef struct _iobuf
{
        char*        _ptr;
        int        _cnt;
        char*        _base;
        int        _flag;
        int        _file;
        int        _charbuf;
        int        _bufsiz;
        char*        _tmpfname;
} FILE;
#endif        /* Not _FILE_DEFINED */[/mw_shl_code]

当然,这洋文我是没看懂,第二,那些变量都是什么!(这是直接在啊哈C的目录里找到,望大神解答)

最佳答案

查看完整内容

这些变量对库的使用者没有意义,只能推测每个变量的含义 比较明显的是 _flag,文件打开的模式(读 写 追加 二进制),_file是文件描述符(0-标准输入流 1-标准输出流……),_bufsize是缓冲区大小(知道stdio.h提供的所有函数都是缓冲的吧?),_tmpfname(临时文件的文件名) _ptr和_base应该分别是下一个读写位置和缓冲区开始的位置 _charbuf可能是“没有其他缓冲区时,一个单字符的缓冲区” _cnt可能是被推回到流中的字 ...
沙发
发表于 2014-10-3 21:20:16 | 只看该作者
这些变量对库的使用者没有意义,只能推测每个变量的含义
比较明显的是 _flag,文件打开的模式(读 写 追加 二进制),_file是文件描述符(0-标准输入流 1-标准输出流……),_bufsize是缓冲区大小(知道stdio.h提供的所有函数都是缓冲的吧?),_tmpfname(临时文件的文件名)

_ptr和_base应该分别是下一个读写位置和缓冲区开始的位置

_charbuf可能是“没有其他缓冲区时,一个单字符的缓冲区”
_cnt可能是被推回到流中的字符数目(如果你知道unget函数就明白)
板凳
发表于 2014-10-4 08:23:18 | 只看该作者
rosynirvana 发表于 2014-10-3 21:47
这些变量对库的使用者没有意义,只能推测每个变量的含义
比较明显的是 _flag,文件打开的模式(读 写 追加 ...

大神诶~~~~~
地板
 楼主| 发表于 2014-10-5 21:24:30 | 只看该作者
rosynirvana 发表于 2014-10-3 21:47
这些变量对库的使用者没有意义,只能推测每个变量的含义
比较明显的是 _flag,文件打开的模式(读 写 追加 ...

我试了一下,
[mw_shl_code=c,true]void f()
{
FILE *fp;
fp = fopen ("Hello.txt", 'r');
printf ("%s\n", fp->_base);
}[/mw_shl_code]
其中Hello.txt文件里面为"Hello world!"
然后——它就给我输出“Hello world!”,那这是不是就说明_base不是缓冲区开始的位置?
5#
发表于 2014-10-5 22:27:15 | 只看该作者
Amath13 发表于 2014-10-5 21:24
我试了一下,
[mw_shl_code=c,true]void f()
{

为什么不是?你明白缓冲区的含义吧?
6#
 楼主| 发表于 2014-10-6 18:00:05 | 只看该作者
rosynirvana 发表于 2014-10-5 22:27
为什么不是?你明白缓冲区的含义吧?

我确实不怎么明白缓冲的含义
7#
发表于 2014-10-6 19:07:47 | 只看该作者
Amath13 发表于 2014-10-6 18:00
我确实不怎么明白缓冲的含义

访问fp的标准库函数都只会从_base读取数据
你的那个例子刚好说明,fopen之后文件就有内容被拷贝到了_base开始的缓冲区中
8#
 楼主| 发表于 2014-10-6 20:09:01 | 只看该作者
rosynirvana 发表于 2014-10-6 19:07
访问fp的标准库函数都只会从_base读取数据
你的那个例子刚好说明,fopen之后文件就有内容被拷贝到了_bas ...

好像是懂了,就像字符數組那樣。實在是多謝了。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

广播台
特别关注
快速回复 返回顶部 返回列表