UNIX:缓冲区和重定向
-scanf讀入原則
單字符讀入,跳過空格、制表、換行
-getchar 讀入原則:單字符讀入,讀取每個(gè)字符包括空格制表換行與putchar一起被定義為供預(yù)處理器使用的宏,不是真正意義上的函數(shù)
I/O函數(shù):所有系統(tǒng)都通用的具有可移植性的函數(shù),處理文件輸入、輸出的程序也使用這些函數(shù)
宏
輸入形式分兩種:
-緩沖輸入:按下enter鍵后才能使用輸入的數(shù)據(jù)
-無緩沖輸入:輸入的字符立即被程序使用,多用于游戲中按鍵對(duì)應(yīng)直接的指令。
?
ANSI和C規(guī)定輸入都是緩沖的,但之前K&R時(shí)將輸入類型交與編譯器的編寫者決定
????-conio.h頭文件:
?????????????????????????????????提供支持無緩沖輸入的函數(shù)
??????????????????????????????????例如:
???????????????????????????????????兼容IBM PC的編譯器
???????????????????????????????????回顯無緩沖輸入getche(回顯即輸入的字符直接顯示在顯示器上)
??????????????????????????????????無回顯無緩沖輸入getch
?
?
UNIX系統(tǒng)中
ioctl(UNIX庫函數(shù),非c定義函數(shù))指定待輸入類型,然后使用getchar()完成相應(yīng)操作
ansi c中 用setbuf()和setvbuf()控制緩沖,但因?yàn)橄到y(tǒng)內(nèi)部設(shè)置可能無法使用,所以ANSI沒有可以調(diào)用無緩沖輸入的標(biāo)準(zhǔn)方式
??????????????????????????????????
緩沖區(qū):臨時(shí)儲(chǔ)存區(qū)
-緩存區(qū)存在的意義:
?將若干字符作為一個(gè)快傳遞比單個(gè)傳遞字符更有效率
?可以修改輸入時(shí)的錯(cuò)誤,如沒有緩存區(qū),錯(cuò)誤的數(shù)據(jù)將立即被使用,造成錯(cuò)誤的計(jì)算結(jié)果。
緩沖類型
-完全緩沖I/O:在填滿緩沖區(qū)之后才會(huì)刷新緩沖區(qū),通常用于文件輸入。緩沖區(qū)常見大小為512或4096字節(jié)。
-行緩沖I/O:在讀入換行符后刷新緩沖區(qū)
當(dāng)重定向到文件時(shí),使用全緩沖方式
處理文件
文件為儲(chǔ)存器中儲(chǔ)存信息的區(qū)域。
有些程序涉及處理一些文件,這需要程序去打開,讀取,(甚至為文件讀入新數(shù)據(jù))然后關(guān)閉文件。這些處理文件的步驟可以通過c的庫函數(shù)實(shí)現(xiàn),也可通過主機(jī)操作系統(tǒng)的基本文件工具直接處理文件(這種直接調(diào)用操作系統(tǒng)的函數(shù)叫底層I/O),但是由于操作系統(tǒng)的不同(例如儲(chǔ)存文件方式不同等)文件,無法為底層I/O建立標(biāo)準(zhǔn)庫,還有一種方式就是使用I/O包,創(chuàng)建用于處理文件的標(biāo)準(zhǔn)模型和一套標(biāo)準(zhǔn)I/O函數(shù)
?
流:實(shí)際輸入或輸出映射的理想化數(shù)據(jù)流stdin流表示鍵盤輸入,stdout流表示屏幕輸入,getchar putchar printf scanf都是標(biāo)準(zhǔn)I/O包成員處理這兩個(gè)流
?
判斷文件結(jié)尾
-規(guī)定文件大小,超過字節(jié)將停止錄入
-使用特殊字符標(biāo)記結(jié)尾,Ctrl+Z。
除調(diào)用操作系統(tǒng)判斷結(jié)尾外,c語言中g(shù)etchar函數(shù)通過返回值EOF判斷文件是否到達(dá)結(jié)尾,(getchar如讀入成功返回值在0-255間)
?
重定向
-使用文件方式一:使用特定函數(shù)處理文件
-使用文件方式二:設(shè)計(jì)能與鍵盤和屏幕互動(dòng)的程序,重定向輸入到文件使用getchar獲取內(nèi)容和再從文件輸出
?
c具有重定向特性且能在缺乏重定向特性的系統(tǒng)中模擬重定向。
?
重定向運(yùn)算符
project<text file
-<-將程序和sdin流相連,讀取文本文件中的字符
->-將程序和sdout流相連,輸出文本文件中的字符、
如組合重定向的話,輸出文件名不能和輸入名一樣,重定向運(yùn)算符只能連接程序和文件,不可鏈接文件與文件,程序與程序,不可重定向多個(gè)對(duì)象。
->>-將輸入數(shù)據(jù)添加到文件末尾
-|-將文件的輸出連接到另一個(gè)文件的輸入
?
總結(jié)
以上是生活随笔為你收集整理的UNIX:缓冲区和重定向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UNIX:描述符和文件结构
- 下一篇: Mybatis:基于注解形式,传入Lis