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