第五章具體介紹了標準I/O庫的各類細節,要是一一列出來,有費精力且可能列不全,故只講日常多用到的。
標準輸入輸出是由一大批函數組成的。數組
要記住,標準輸入輸出是有緩衝的,就是當緩衝區的數據滿了的時候,纔會調用read和write函數。而在第三章的時候,是立刻調用read和write函數的。安全
緩衝分爲3種,全緩衝,行緩衝和無緩衝。跟終端相關的通常是行緩衝,而標準出錯是無緩衝,文件讀寫的通常都是全緩衝。
改變緩衝模式的有兩個函數,setbuf和setvbuf函數。我的感受setvbuf比較好用,具體實現請翻書。函數
打開一個流通常是用fopen函數,關閉一個流則是用fclose函數。字符串
讀和寫流分爲幾種,有用字符讀寫的,有用字符串的寫的,還有讀二進制文件的時候是一塊塊讀寫的。get
字符讀寫:讀的是getc、fgetc和getchar函數。getchar(void)實際上就等於fgetc(stdin),而getc和fgetc的區別在於第一個可以做爲宏,而第二個只能做爲函數。這三個函數出錯或者讀到文件末尾(EOF)都會返回-1,那怎麼區別呢?用ferror或者feof函數來區別。對應的就會有輸出函數:putc函數、fputc函數和putchar函數。區別跟上述差很少。這麼多個函數,通常我的認爲只選定一種函數用就行,固然也要看狀況。不過通常來講,我讀寫字符的話就用fgetc和fputc吧。it
每次一行I/O:顧名思義,每次讀取一行,就是當碰到換行符的時候就會輸入或輸出。讀的是fgets和gets。強烈建議用fgets而不用gets函數,由於gets函數沒有指定輸入字符的個數,也就是有可能會形成溢出,不安全。fputs和puts就負責輸出。兩個函數的相同點就是輸出一個以NULL結尾的字符串,可是區別就是puts將一個以NULL結尾的字符串寫道標準輸出,終止符不寫出。可是puts而後又將一個換行符寫道標準輸出。就是若是用fputs函數的話,咱們就必須本身處理換行符(若是那個字符串不包括換行符的話)。終端
二進制I/O的話就是fread和fwrite函數了,沒什麼好說的,具體請翻書。二進制
定位流的話就用ftell和fseek組合,不過偏移值是長整型(不過應該不要緊吧)error
格式化輸入輸出的就是printf和scanf的函數族了。有不少變種函數,但都是格式化的。具體請翻書。數據
最後,我認爲這筆記只是概況,有問題仍是要查書,看多了,就天然記住了。