輸入緩沖:
先來看一個回顯小程序echo,它把用戶輸入的字符顯示到屏幕上
//echo.c
#include<stdio.h> int main() { int ch; while((ch=getchar())!=EOF) { putchar(ch); } }
運行結果如下(按ctrl+d 退出循環,程序結束)
這個程序在不同系統上還有一個可能的結果是
hheelloo
這一般是例外情況,在大多數系統上,在按下回車之前什麼都不會發生,正如第一種結果所示。
輸入字符立即回顯非緩沖(unbuffered)或直接(direct)輸入的一種實例,它表示輸入的字符對正在等待的程序立即變為可用。
反之,延遲回顯的是緩沖(buffered)輸入的實例,這種情況下所輸入的字符被收集並存儲在一個被稱為緩沖區(buffer)的臨時存儲區域當中,當按下回車時所輸入的字符塊對程序變為可用,於是便一起顯示到了屏幕上。
緩沖區的作用:
1.將若干個字符作為一個塊傳輸比逐個發送這些字符的耗時少
2.如果輸入有誤,可用使用delete鍵進行修改
非緩沖輸入的適用性:一些交互式程序,希望按下鍵就執行某個命令
緩沖又可以分為兩類:
完全緩沖I/O:緩沖區滿時被清空(內容被發送至其他目的地),這類緩沖通常出現在文件輸入中
行緩沖I/O:遇到換行符時清空緩沖區,鍵盤是標准的行緩沖,按下回車鍵將清空緩沖區
重定向:
默認情況下使用標准IO包的C程序將標准輸入作為其輸入流,這個流是作為向計算機中讀取數據的常規方式建立的,現在一般是我們的鍵盤。同理標准輸出流一般是我們的顯示器。
然而我們可以將標准輸入輸出流重定向分配至文件
現在用mywords文件(隨便建的一個文件,輸入了一些字符)代替鍵盤作為我們的輸入使用echo
果然echo程序把mywords中的內容顯示出來了
<符號是Unix、Linux、DOS的重定向運算符,該運算符把mywords文件和標准輸入流關聯了起來,將該文件的內容引導至echo程序。
同理也可以使用>符號實現輸出流重定向到文件
可以看到程序把我們從鍵盤輸入的字符串輸出到了myword當中,而不是回顯在屏幕上了
參考:C primer plus