C语言文件缓冲区作用,C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲...

//文件结构体FILE的理解以及缓冲区再讲

#include

#include

//要点:文件结构

//struct _iobuf {

// char *_ptr; ------当前缓冲区内容指针

// int _cnt; ------缓冲区还有多少字符

// char *_base; ------缓冲区的起始地址

// int _flag; ------文件流的状态,是否错误或结束

// int _file; -----文件描述符

// int _charbuf; -----双字节缓冲,缓冲2个字节

// int _bufsiz; -----缓冲区大小

// char *_tmpfname; -----临时文件名

//};

//typedef struct _iobuf FILE;

void main(){

// stdin是键盘文件指针

char ch;

printf("缓冲区的有效数据是%d\n", stdin->_cnt);

printf("指向缓冲区的指针%x\n", stdin->_ptr);

printf("缓冲区的起始地址%x\n", stdin->_base);

printf("缓冲区的大小%d\n", stdin->_bufsiz);

printf("文件标识符%d\n", stdin->_file);

printf("------------\n");

ch = getchar();

printf("当前获取的字符是%c\n", ch);

printf("缓冲区的有效数据是%d\n", stdin->_cnt);

printf("指向缓冲区的指针%x\n", stdin->_ptr);

printf("缓冲区的起始地址%x\n", stdin->_base);

printf("缓冲区的大小%d\n", stdin->_bufsiz);

printf("文件标识符%d\n", stdin->_file);

//键盘输出123456

//打印结果:

//当前获取的字符是1

//注:getchar()只能获取一个字符,并且将缓冲区内容指针向后移动一个字节(这里ch是char,所以是1个字节,int就会是4个字节)

//缓冲区的有效数据是6

//注:这里对缓冲区的有效数据是6作解释,现在缓冲区内实际字符是7个(1,2,3,4,5,6,回车符)

//因为此时缓冲区内容指针向后移动一个字节,所有有效的就剩下6个

//指向缓冲区的指针f56c701

//注:这里ch是char类型,所以缓冲区内容指针向后移动一个字节

//缓冲区的起始地址f56c700

//缓冲区的大小4096

//文件标识符0

printf("------------\n");

ch = getchar();

printf("当前获取的字符是%c\n", ch);

printf("缓冲区的有效数据是%d\n", stdin->_cnt);

printf("指向缓冲区的指针%x\n", stdin->_ptr);

printf("缓冲区的起始地址%x\n", stdin->_base);

printf("缓冲区的大小%d\n", stdin->_bufsiz);

printf("文件标识符%d\n", stdin->_file);

printf("------------\n");

fflush(stdin);

//fflush()函数的作用是有效数据清零,指针回到起始地址

//扩展:

//函数名: fflush

//功 能 : 清除读写缓冲区,需要立即把输出缓冲区的数据进行物理写入时

//头文件:stdio.h

//原型 : int fflush(FILE *stream)

//fflush()函数与stdin->_cnt = 0;stdin->_ptr = stdin->_base;代码等价

/*stdin->_cnt = 0;

stdin->_ptr = stdin->_base;*/

//rewind(stdin);

//函数名: rewind()

//功 能 : 将文件内部的位置指针重新指向一个流(数据流 / 文件)的开头

//注意:不是文件指针而是文件内部的位置指针,随着对文件的读写文件的位置指针(指向当前读写字节)向后移动。而文件指针是指向整个文件,如果不重新赋值文件指针不会改变。

//rewind函数作用等同于(void)fseek(stream, 0L, SEEK_SET); [1]

//用 法 : void rewind(FILE *stream);

//头文件: stdio.h

//rewind()比fflush()功能更加复杂,rewind()会对文件指针和文件位置指针进行操作,而fflush()主要指针文件位置指针进行操作

printf("当前获取的字符是%c\n", ch);

printf("缓冲区的有效数据是%d\n", stdin->_cnt);

printf("指向缓冲区的指针%x\n", stdin->_ptr);

printf("缓冲区的起始地址%x\n", stdin->_base);

printf("缓冲区的大小%d\n", stdin->_bufsiz);

printf("文件标识符%d\n", stdin->_file);

//打印结果:

//当前获取的字符是2

//注:ch是个变量,在内存上有实际地址,清空的只是stdin的缓存,不会影响ch变量

//缓冲区的有效数据是0

//指向缓冲区的指针f56c700

//缓冲区的起始地址f56c700

//缓冲区的大小4096

//文件标识符0

system("pause");

}

cb99ed3671622f572f0ba7a92ff030d0.png

C语言文件操作 FILE结构体

内存中的数据都是暂时的,当程序结束时,它们都将丢失.为了永久性的保存大量的数据,C语言提供了对文件的操作. 1.文件和流 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特 ...

c语言_文件操作_FILE结构体解释_涉及对操作系统文件FCB操作的解释_

1. 文件和流的关系 C将每个文件简单地作为顺序字节流(如下图).每个文件用文件结束符结束,或者在特定字节数的地方结束,这个特定的字节数可以存储在系统维护的管理数据结构中.当打开文件时,就建立了和文件 ...

c语言文件操作函数详解

一.文件操作注意点: 1 打开文件时,如果打开方式加“+”,表示该文件可以“写” ; 2 退出程序一般用exit函数,正常退出参数为0,非正常退出参数为正零值 ; 3 文件的读写操作:按字符.字符串. ...

【转】C语言文件操作解析(三)

原文网址:http://www.cnblogs.com/dolphin0520/archive/2011/10/07/2200454.html C语言文件操作解析(三) 在前面已经讨论了文件打开操作, ...

关于C语言文件操作

关于C语言的文件操作之前我也写过一篇博客来介绍,但是当时写的很不全面,只是简单的使用了一下 ,今天再从新学习一下. 1.文件的写 首先还是先看一个简单的例子: include

go语言文件操作,这期资料比较详细( 欢迎加入go语言群: 218160862 )

go语言文件操作,这期资料比较详细 欢迎加入go语言群: go语言深圳群 golang深圳 218160862 点击加入 文件操作 func Open(name string) (file *File ...

C语言文件操作

C语言文件操作,以下以基本的例子和说明来展开怎么通过C语言来进行文件操作. 操作文件,我们得需要知道什么?当然是路径和文件名. 首先我需要知道我操作的文件在哪里,叫什么名字.在C语言中还存在一个打开方 ...

C 语言文件操作

C 语言文件操作 1. 数据流:     程序与数据的交互以流的形式进行.fopen 即打开数据流,fclose 即刷新数据流.     所谓数据流,是一种抽象,表示这段数据像流一样,需要逐步接收,不 ...

C语言文件操作函数

C语言文件操作函数大全 clearerr(清除文件流的错误旗标) 相关函数 feof表头文件 #include 定义函数 void clearerr(FILE * str ...

随机推荐

iOS Unicode和汉字互转

//unicode转中文 NSString* strA = [@"%E4%B8%AD%E5%9B%BD"stringByReplacingPercentEscapesUsingEn ...

ASP.NET MVC:窗体身份验证及角色权限管理示例

ASP.NET MVC 建立 ASP.NET 基础之上,很多 ASP.NET 的特性(如窗体身份验证.成员资格)在 MVC 中可以直接使用.本文旨在提供可参考的代码,不会涉及这方面太多理论的知识. 本 ...

android 动态改变listview的内容

本文模拟:点击一个按钮,为已有的listview添加一行数据 <?xml version="1.0" encoding="utf-8"?> < ...

Nginx出现&OpenCurlyDoubleQuote;413 Request Entity Too Large”错误解决方法

Nginx出现“413 Request Entity Too Large”错误解决方法 2011-03-25 13:49:55|  分类: 默认分类 |  标签:413  request  entit ...

javascript高级知识分析——上下文

如果函数是一个对象的属性,那么它可以? var katana = { isSharp: true, use: function(){ this.isSharp = !this.isSharp; } } ...

Cordova 使用经验

1. 需要下载ant,ant需要的文件: build.xml <?xml version="1.0" ?>

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值