C語言中的FILE結構

在進行文件輸入輸出操作時,用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' 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章