在进行文件输入输出操作时,用FILE来声明文件指针:
FILE *input, *output;
在"stdio.h"中定义的FILE结构如下:
- typedef struct
- {
- int level; /*填充/清空一级缓存*/
- unsigned flag; /*文件状态指针*/
- char fd; /*文件描述符*/
- unsigned char hold; /*ungetc char if no buffer*/
- int bsize; /*缓存区大小*/
- unsigned char *buffer; /*Data transfer buffer*/
- unsigned char *curp; /*Current active pointer*/
- unsigned istemp; /*Temporary file indicator*/
- short token; /*Used for validity checking*/
- }FILE;
FILE结构包含操作系统用来访问文件的低级文件描述符、文件缓存区的大小和位置、unget使用的字符缓存区,表示文件是否为临时文件的标志以及其他一些标志变量。此外,FILE指针还存储了文件指针,可以对文件中的当前位置进行跟踪记录。
系统为每个打开的文件都在内存中开辟一个区域,用于存放文件的有关信息(例如文件名、文件位置等)。这些信息保存在结构类型变量中,该结构类型由系统定义,取名为FILE。(注意“FILE必须大写”)
CPU缓存(Cache Memory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多,缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾。
一级缓存都内置在CPU内部并与CPU同速运行,可以有效的提高CPU的运行效率。一级缓存越大,CPU的运行效率越高,但受到CPU内部结构的限制,一级缓存的容量都很小。按照数据读取顺序和与CPU结合的紧密程度,CPU缓存可以分为一级缓存,二级缓存,部分高端CPU还具有三级缓存,每一级缓存中所储存的全部数据都是下一级缓存的一部分,这三种缓存的技术难度和制造成本是相对递减的,所以其容量也是相对递增的。当CPU要读取一个数据时,首先从一级缓存中查找,如果没有找到再从二级缓存中查找,如果还是没有就从三级缓存或内存中查找。一般来说,每级缓存的命中率大概都在80%左右,也就是说全部数据量的80%都可以在一级缓存中找到,只剩下20%的总数据量才需要从二级缓存、三级缓存或内存中读取,由此可见一级缓存是整个CPU缓存架构中最为重要的部分。
ungetc()函数
功能
把一个字符退回到输入流中
定义
int ungetc(char c, FILE *stream);
输入参数
c 要写入的字符,stream 文件流指针
输出参数
字符c - 操作成功,EOF - 操作失败
程序例
- #include <stdio.h>
- #include <ctype.h>
- void main( void )
- {
- int ch;
- int result = 0;
- printf( "Enter an integer: " );
- /* Read in and convert number: */
- while( ((ch = getchar()) != EOF) && isdigit( ch ) )
- result = result * 10 + ch - '0';
- /* Use digit. */
- if( ch != EOF )
- ungetc( ch, stdin );
- /* Put nondigit back. */
- printf( "Number = %d\nNextcharacter in stream = '%c'", result, getchar() );
- }
- Output
- Enter an integer: 521a
- Number = 521Nextcharacter in stream = 'a'
转载于:https://blog.51cto.com/yaotiaochimei/841497