檔案描述符(file descriptor)通常是乙個小的非負整數,核心用它標識乙個特定程序正在訪問的檔案。當核心開啟乙個已有檔案或建立乙個新檔案時,它返回乙個檔案描述符。在讀、寫檔案時,就可以使用它。
按慣例,每當執行乙個新程式時,所有的shell都會為其開啟三個檔案描述符:標準輸入(standard input)、標準輸出(standard output)以及標準出錯(standard error)。如果沒有做什麼特殊處理(如重定向),則這三個描述符都鏈向終端。
函式open、read、write、lseek以及close提供了不用緩衝的i/o。這些函式都使用檔案描述符。
程式清單1-2 將標準輸入複製到標準輸出
[root@localhost unix_env_advance_prog]# cat prog1-2.c #include
"apue.h
"#define buffsize 4096
intmain(
void
)
標頭檔案(apue.h中包含了此標頭檔案)及兩個常量stdin_fileno和stdout_fileno是posix標準的一部分。該標頭檔案包含了很多unix系統服務的函式原型。
兩個常量stdin_fileno和stdout_fileno定義在標頭檔案中,它們指定了標準輸入和標準輸出的檔案描述符。它們的典型值分別是0和1,但是考慮到可移植性,我們將使用新名字。
read函式返回讀得多位元組數,此值用作要寫的位元組數。當到達檔案尾端時,read返回0,程式停止執行。如果發生了乙個讀錯誤,read返回-1.出錯時大多數系統函式返回-1.
prog1-2.c編譯成功後,以下列方式執行它:
[root@localhost unix_env_advance_prog]# ./prog1-2 > data
那麼,標準輸入是終端,標準輸出則重新定向至檔案data,標準出錯也是終端。如果此輸出檔案並不存在,那麼shell會建立它。該程式將使用者鍵入的各行複製至標準輸出,鍵入檔案結束字元(通常是ctrl+d)時,則終止該次複製。
若以下列方式執行該程式:
[root@localhost unix_env_advance_prog]# ./prog1-2< infile > outfile
那麼名為infile檔案的內容複製到名為outfile的檔案中。
標準i/o函式提供一種對不用緩衝i/o函式的帶緩衝的介面。使用標準i/o函式可以無需擔心如何選取最佳的緩衝區大小,例如prog1-2中的buffsize常量的大小。使用標準i/o函式的另乙個優點是簡化了對輸入行的處理(常常發生在unix的應用中)。例如,fgets函式讀一完整的行,而read函式讀指定位元組數。
我們最熟悉的標準i/o函式是printf。在呼叫printf的程式中,總是包括,該標頭檔案包括了所有標準i/o函式的原型。
程式清單1-3 用標準i/o將標準輸入複製到標準輸出
[root@localhost unix_env_advance_prog]# cat prog1-3.c #include
"apue.h
"int
main(
void
)
函式getc一次讀乙個字元,然後函式putc將此字元寫到標準輸出。讀到輸入的最後1個位元組時,getc返回常量eof,該常量在中定義。標準輸入/標準輸出常量stdin和stdout也定義在標頭檔案中,它們分別表示標準輸入和標準輸出檔案。
本篇博文內容摘自《unix環境高階程式設計》(第二版),僅作個人學習記錄所用。關於本書可參考:。
UNIX基礎知識之輸入和輸出
檔案描述符 file descriptor 通常是乙個小的非負整數,核心用它標識乙個特定程序正在訪問的檔案。當核心開啟乙個已有檔案或建立乙個新檔案時,它返回乙個檔案描述符。在讀 寫檔案時,就可以使用它。按慣例,每當執行乙個新程式時,所有的shell都會為其開啟三個檔案描述符 標準輸入 standar...
Python基礎知識(1) 輸入和輸出
列印字串 print hello,python world 依次列印多個字串,字串之間輸出乙個空格 print this lesson is your first lesson 列印整數 print 300 列印公式 print 100 200 100 200 為變數賦值,並列印值 name inp...
UNIX基礎知識之訊號
本篇博文內容摘自 unix環境高階程式設計 第二版 僅作個人學習記錄所用。關於本書可參考 訊號 signal 是通知程序已發生某種情況的一種技術。例如,若某一程序執行除法操作,其除數為0,則將名為sigfpe 浮點異常 的訊號傳送給該程序。程序如果處理訊號有三種選擇 2 按系統預設方式處理。對於除以...