在进行文件输入输出操作时,用FILE来声明文件指针:

FILE *input, *output;

在"stdio.h"中定义的FILE结构如下:

  1. typedef struct 
  2. {  
  3.  int level; /*填充/清空一级缓存*/ 
  4.  unsigned flag; /*文件状态指针*/ 
  5.  char fd; /*文件描述符*/ 
  6.  unsigned char hold; /*ungetc char if no buffer*/ 
  7.  int bsize; /*缓存区大小*/ 
  8.  unsigned char *buffer; /*Data transfer buffer*/ 
  9.  unsigned char *curp; /*Current active pointer*/ 
  10.  unsigned istemp; /*Temporary file indicator*/ 
  11.  short token; /*Used for validity checking*/ 
  12. }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 - 操作失败
程序例

  1. #include <stdio.h>  
  2. #include <ctype.h>  
  3. void main( void )  
  4. {  
  5.  int ch;  
  6.  int result = 0;  
  7.  printf( "Enter an integer: " );  
  8.  /* Read in and convert number: */ 
  9.  while( ((ch = getchar()) != EOF) && isdigit( ch ) )  
  10.   result = result * 10 + ch - '0';  
  11.  /* Use digit. */ 
  12.  if( ch != EOF )  
  13.   ungetc( ch, stdin );  
  14.  /* Put nondigit back. */ 
  15.  printf( "Number = %d\nNextcharacter in stream = '%c'",   result, getchar() );  
  16. }  
  17.  
  18. Output  
  19.  Enter an integer: 521a  
  20.  Number = 521Nextcharacter in stream = 'a'