C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲
//文件结构体FILE的理解以及缓冲区再讲 #include<stdio.h>
#include<stdlib.h> //要点:文件结构
//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");
}

C语言 文件操作4--文件结构体FILE的理解以及缓冲区再讲的更多相关文章
- 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<stdio.h&g ...
- 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<stdio.h> 定义函数 void clearerr(FILE * str ...
随机推荐
- C语言泛型编程--抽象数据类型
一.数据类型: 在任何编程语言中,数据类型作为一个整体,ANSI-C包含的类型为:int.double.char……,程序员很少满意语言本身提供的数据类型,一个简单的办法就是构造类似:array.st ...
- JAVA-插入排序
插入排序 package com.pb.string.demo1; /** * 插入排序 * @author Denny * */ public class Demo { public static ...
- iOS多线程邂逅
.线程之间的通信 //有一个特别耗时的操作,比如说网络请求,开启子线程去请求网络,我们一般是要在主线程更新UI,如何从子线程跳转到主线程? #import "ViewController.h ...
- 分析实现Android自定义View之扇形图
继承View基类,画了这样的扇形图 直接来步骤吧 (参考了GcsSloop的教程) 1.分析 自定义View需要认真的分析下,里面还是会用到一些数学知识 首先是扇形该怎么表现 1. 扇形的外观是个圆弧 ...
- OC语言-02-OC语言-基础知识
一.基础语法 1> OC语言和C语言 C语言是面向过程的语言,OC语言是面向对象的语言 OC语言继承了C语言,并增加了面向对象的思想 以下内容只介绍OC语言与C语言的不同之处 2> 关键字 ...
- DP大作战——多重背包
题目描述 在之前的上机中,零崎已经出过了01背包和完全背包,也介绍了使用-1初始化容量限定背包必须装满这种小技巧,接下来的背包问题相对有些难度,可以说是01背包和完全背包的进阶问题. 多重背包:物品可 ...
- 记录ConcurrentHashMap的锁分离技术
对比上图,HashTable实现锁的方式是锁整个hash表,而ConcurrentHashMap的实现方式是锁桶(简单理解就是将整个hash表想象成一大缸水,现在将这大缸里的水分到了几个水桶里,has ...
- Windows7下安装MongoDB(转)
1.下载 地址:http://www.mongodb.org/downloads(32位还是64位自行选择). 我下载的是:mongodb-win32-x86_64-2.4.5.zip 2.解压 把m ...
- Java程序员修炼之道 之 Logging(1/3) - Logback 配置(转)
转自紫风乱写:http://www.blogjava.net/justfly/archive/2014/08/10/416768.html,建议大家去原处学习 写在前面的话: 作为<Java程序 ...
- APMServ 配置记录
下载版本是5.2.6,它采用压缩率更高的7zip 解压后拷贝到c盘 点击APMServ.exe就可以启动了 注意: 1. SSL 有时需要关掉,否则apache起不来 2. 多数时候我只用apache ...