C輸入緩衝與重定向

輸入緩衝:小程序

先來看一個回顯小程序echo,它把用戶輸入的字符顯示到屏幕上spa

//echo.c
#include<stdio.h> int main() { int ch; while((ch=getchar())!=EOF) { putchar(ch); } }

運行結果以下(按ctrl+d 退出循環,程序結束)3d

這個程序在不一樣系統上還有一個可能的結果是code

hheellooblog

這通常是例外狀況,在大多數系統上,在按下回車以前什麼都不會發生,正如第一種結果所示。字符串

輸入字符當即回顯非緩衝(unbuffered)直接(direct)輸入的一種實例,它表示輸入的字符對正在等待的程序當即變爲可用。get

反之,延遲迴顯的是緩衝(buffered)輸入的實例,這種狀況下所輸入的字符被收集並存儲在一個被稱爲緩衝區(buffer)的臨時存儲區域當中,當按下回車時所輸入的字符塊對程序變爲可用,因而便一塊兒顯示到了屏幕上。io

緩衝區的做用:class

  1.將若干個字符做爲一個塊傳輸比逐個發送這些字符的耗時少循環

  2.若是輸入有誤,可用使用delete鍵進行修改

非緩衝輸入的適用性:一些交互式程序,但願按下鍵就執行某個命令

 

緩衝又能夠分爲兩類:

  徹底緩衝I/O:緩衝區滿時被清空(內容被髮送至其餘目的地),這類緩衝一般出如今文件輸入中

  行緩衝I/O:遇到換行符時清空緩衝區,鍵盤是標準的行緩衝,按下回車鍵將清空緩衝區

 

重定向:

  默認狀況下使用標準IO包的C程序將標準輸入做爲其輸入流,這個流是做爲向計算機中讀取數據的常規方式創建的,如今通常是咱們的鍵盤。同理標準輸出流通常是咱們的顯示器。

  然而咱們能夠將標準輸入輸出流重定向分配至文件

 

  如今用mywords文件(隨便建的一個文件,輸入了一些字符)代替鍵盤做爲咱們的輸入使用echo

  

  果真echo程序把mywords中的內容顯示出來了

  <符號是Unix、Linux、DOS的重定向運算符,該運算符把mywords文件和標準輸入流關聯了起來,將該文件的內容引導至echo程序。

  同理也可使用>符號實現輸出流重定向到文件

  

  能夠看到程序把咱們從鍵盤輸入的字符串輸出到了myword當中,而不是回顯在屏幕上了

 

 

參考:C primer plus

相關文章
相關標籤/搜索