Head First C 學習日誌 第十章 進程間通訊 輸入輸出重定向

Head First C 第十章 進程間通訊

建立進程只是個開始 若是你想控制運行中的進程,向進程發送數據讀取它的輸出,該怎麼辦?經過進程間通訊,進程能夠協力完成某件工做。git

進程內部一瞥

進程含有它正在運行的程序,還有棧和堆數據空間。除此以外,進程還須要記錄數據流的連向,好比標準輸出連到了哪裏(默認是屏幕btw)。進程用文件描述符表示數據流,所謂文件描述符其實就是一個數字。github

  • 文件描述符是一個數字,它表明一條數據流。
  1. 一個標準進程
數據流 含義
0 鍵盤 標準輸入
1 屏幕 標準輸出
2 屏幕 標準錯誤
3 數據庫鏈接 其它形式的數據流

建立進程之後,標準輸入連到鍵盤,標準輸出和標準錯誤都鏈接到屏幕。它們會保持這樣的鏈接,直到有人把它們重定向到了其餘地方。數據庫

  • 文件描述符描述的不必定是文件。

重定向即替換數據流。ui

進程能夠重定向本身

到目前爲止,咱們只用> <重定向過程序,但只要修改描述符表,進程也能重定向他們本身。 > - ./myprog >output.txt 2>error.log > - 2> 表示將標準錯誤重定向。 > - ./myprog 2>&1表示將標準錯誤重定向到標準輸出操作系統

  1. fileno()返回描述符號 每打開一個文件,操做系統都會在描述符表中新註冊一項。假設打開了某個文件: FILE *my_file = fopen("guitar.mp3","r"); 操做系統會打開guitar.mp3文件,而後返回一個指向它的指針,操做系統還會遍歷描述符表尋找空項,把新文件註冊在其中。 | # | 數據流 |含義| | :-------- | --------:| ---:| | 0 | 鍵盤 |標準輸入| | 1 | 屏幕 |標準輸出| | 2 | 屏幕 |標準錯誤| | 3 | 數據庫鏈接 |其它形式的數據流| | 4 | guitar.mp3 |其它形式的數據流| 調用fileno()就能夠根據文件指針知道它是幾號文件描述符。
  2. dup2()複製數據流 dup是duplicate的縮寫,舉例說明dup2的用法: dup2(4,3):將3號文件描述符指向4號文件描述符指向的數據流
代碼

sample指針

相關文章
相關標籤/搜索