• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            PIGWORLD

            學無止境

            1.5 輸入和輸出

            1.5 輸入和輸出

            文件描述符

            文件描述符通常是小的且非負的整數(shù),內核使用它來標識能被特定進程訪問的文件。只要打開或創(chuàng)建了新文件,內核就返回一個文件描述符,我們使用它來讀寫文件。

            標準輸入,標準輸出和標準錯誤

            通常,一旦一個新的程序運行,所有的shell就為其打開三個描述符:標準輸入,標準輸出和標準錯誤。如果不做什么特別的事,就像下面這樣一條簡單的命令:

            ls

            那么所有的三個描述符都連接到終端。多數(shù)shell提供了一種方式來重定向三個描述符到文件。例如:

            ls > file.list

            執(zhí)行ls命令,并把它的標準輸出重定向到名為file.list的文件。

            無緩沖I/O

            無緩沖I/Oopen函數(shù),read函數(shù),write函數(shù),lseek函數(shù)和close函數(shù)提供。這些函數(shù)都需要文件描述符才能工作。

            例子

            如果我們想要從標準輸入讀取,從標準輸出寫入,那么圖1.4中的程序就可以拷貝UNIX系統(tǒng)中的常規(guī)文件。

            apue.h中包含的<unistd.h>頭文件,以及兩個常量STDIN_FILENOSTDOUT_FILENO都是POSIX標準(下章中將會詳細介紹)的一部分。在該頭文件中有許多UNIX系統(tǒng)服務的函數(shù)的原型,例如我們調用的readwrite函數(shù)。

            常量STDIN_FILENOSTDOUT_FILENO<unistd.h>中定義,它們指定了標準輸入和標準輸出的文件描述符。通常,STDIN_FILENOSTDOUT_FILENO的值分別為01,然而,在便攜設備開發(fā)中,我們使用新的名字來表示它們。

            3.9節(jié)中會詳細討論BUFFSIZE常量,將看到它的不同值是如何影響一個程序的效率的。盡管如此,無論BUFFSIZE為何值,圖1.4中的程序都會拷貝常規(guī)文件。

            read函數(shù)返回讀取的字節(jié)數(shù),這個值被用來作為要寫入的字節(jié)數(shù)。當?shù)竭_輸入文件的末尾時,read函數(shù)返回0,程序停止。如果讀取時發(fā)生錯誤,read函數(shù)返回-1。多數(shù)系統(tǒng)函數(shù)在發(fā)生錯誤時返回1

            如果像下面這樣按標準名字(a.out)編譯我們的程序

            ./a.out > data

            標準輸入就是終端,而標準輸出被重定向到文件data,同時標準錯誤也是終端。如果這個輸出文件不存在,那么shell將默認創(chuàng)建它。除非輸入終止符(通常是Control-D),程序將拷貝輸入到標準輸出。

            如果我們運行

            ./a.out < infile > outfile

            那么文件finfile將被拷貝到文件outfile

            http://pigworld.blogbus.com/files/1136135921.jpg


            1.4 列出目錄中的所有文件

             

            第三章中將詳細描述無緩沖I/O函數(shù)。

            標準I/O

            標準I/O函數(shù)為無緩沖I/O函數(shù)提供了緩沖接口。使用標準I/O可以防止在選擇合適緩沖大小的時候出現(xiàn)錯誤,例如圖1.4中的BUFFSIZE常量。使用標準I/O函數(shù)的另一個優(yōu)點是其僅僅處理輸入的行(UNIX應用程序中的通常事件)。例如fgets函數(shù),它讀取整個一行。另一方面,read函數(shù)讀取指定的字節(jié)數(shù)。就像將5.4節(jié)中看到的那樣,標準I/O庫提供的函數(shù)讓我們能夠控制緩沖的使用風格。

            最常見的標準I/O函數(shù)就是printf。如果在程序中調用printf函數(shù),可以通過包含apue.h來包含<stdio.h>頭文件,<stdio.h>頭文件中包含了所有標準I/O函數(shù)的原型。

            例子

            1.5中的程序會在5.8節(jié)中詳細討論。該程序像前面的程序那樣調用readwrite函數(shù)。該程序拷貝標準輸入到標準輸出,同時也能夠拷貝任何常規(guī)文件。

            getc函數(shù)一次讀取一個字符,該字符被putc函數(shù)寫入。在最后一個輸入的字節(jié)被讀取后,getc返回常量EOF<stdio.h>中定義)。標準I/O常量stdinstdout也在<stdio.h>頭文件中定義,它們分別表示標準輸入和標準輸出。

            http://pigworld.blogbus.com/files/1136135878.jpg


            1.5 使用標準I/O拷貝標注輸入到標注輸出

             

            posted on 2006-01-03 22:04 PIGWORLD 閱讀(522) 評論(0)  編輯 收藏 引用 所屬分類: 《UNIX環(huán)境高級編程(第二版)》翻譯

            2021最新久久久视精品爱| 亚洲综合精品香蕉久久网97| 思思久久99热免费精品6| 久久久久亚洲AV成人网人人网站| 久久精品国产72国产精福利| 欧美成a人片免费看久久| 欧美大香线蕉线伊人久久| 91精品久久久久久无码| 亚洲国产成人久久综合区| 狠狠色丁香久久婷婷综| 热久久国产欧美一区二区精品| 无码人妻少妇久久中文字幕蜜桃| 狠狠久久亚洲欧美专区 | 久久狠狠高潮亚洲精品| A级毛片无码久久精品免费| 亚洲αv久久久噜噜噜噜噜| 精品久久久久久国产三级| 欧美噜噜久久久XXX| 三级韩国一区久久二区综合| 7777久久亚洲中文字幕| 久久se精品一区精品二区国产| 人妻少妇久久中文字幕一区二区| 国产三级观看久久| 狠狠色丁香久久综合五月| 一本色综合网久久| 欧美国产成人久久精品| 久久综合成人网| 久久www免费人成精品香蕉| 久久国产精品99久久久久久老狼| 婷婷五月深深久久精品| 精品久久久中文字幕人妻| 一本久道久久综合狠狠躁AV| 久久精品国产99久久丝袜| 亚洲午夜久久影院| 久久香蕉一级毛片| 九九久久99综合一区二区| 国产精品免费福利久久| AV狠狠色丁香婷婷综合久久| 丰满少妇人妻久久久久久| 国产人久久人人人人爽| 久久99国产精品久久99|