一起talk C栗子吧(第八十七回:C語言執行個體--使用管道進行處理序間通訊概述)

來源:互聯網
上載者:User

標籤:hid   檢索   for   write   發送   pre   article   終端   mod   

各位看官們,大家好。上一回中咱們說的是處理序間通訊的範例。這一回咱們說的範例是:使用管道進行處理序間通訊

閑話休提,言歸正轉。

讓我們一起talk C栗子吧!

我們在前面的的章回中介紹了使用管道進行進程問的通訊,時間不長,相信大家還記得。今天。我們介紹第二種處理序間通訊的方式:管道。大家都知道,我們使用訊號在處理序間通訊時,本質上發送的是一個數值,假設想在進程之間發送一些資料時訊號就無能為力了。此時,管道就派上了用場。

我們能夠通過管道在進程之間發送資料

接下來我們就具體介紹一下管道。

管道相似我們生活中的自來水管,它能夠把自來水引入到家中。在Linux命令中也有管道的身影。通常使用”|”來表示管道。我們舉一個Linux命令中使用管道的範例:

 env | grep bash     //在終端中輸入下面命令而且 執行SHELL=/bin/bash      //命令執行的結果

我們在上面 的範例中首先使用env輸出環境變數,然後通過管道把env命令輸出的內容當作grep命令的輸入內容。grep命令在輸入內容中檢索到了bash,並顯示檢索的結果。也就是我們看到的命令執行結果。

我們在進程中使用的管道和上面範例中使用的管道是相似的:在一個進程內輸入資料,在另外一個進程內輸出資料。

兩個進程通過管道來發送資料。

我們會介紹三種管道及其用法

  • 第一種管道我稱之為偽管道。
  • 第二種管道我稱之為入門級管道。
  • 第三種管道是真正意義上的管道。

偽管道使用popen/pclose開啟一個檔案流,然後使用I/O函數對流進行操作。

由於popen的參數是某個Linux命令。而且它是通過啟動shell來執行Linux命令。所以效能較低。它的效果和終端中管道命令“|”的效果同樣。這也是我稱其為偽管道的原因。

入門級管道通過pipe建立一個管道,而且返回兩個檔案描寫敘述符。然後使用read/write系統調用對返回的fd進行操作,進而實現進程通訊功能。該方法須要配合fork函數一起使用。由於兩個fd在同一個數組中,大部分數組是局部變數。局部變數僅僅能在fork建立的父子進程中使用。

當然了,假設把fd數組定義成全域變數也能夠。只是全域變數的風險就太大了。

真正意義上的管道須要使用mkfifo建立一個管道檔案,它會返回一個fd。接下來,能夠使用open/read等系統叫用作業fd。我們能夠像正常操作檔案一樣操作該管道檔案。該管道還有另外一個名字:具名管道(FIFO)。

看官們,咱們今天僅僅對管道做一個主要的概述。至於怎樣使用管道,我們會在後面的章回中具體介紹。

與此同一時候,我們也會介紹怎樣使用管道在進程之間通訊。

各位看官,關於使用管道進行處理序間通訊的範例咱們就講到這裡。欲知後面還有什麼範例,且聽下回分解 。

一起talk C栗子吧(第八十七回:C語言執行個體--使用管道進行處理序間通訊概述)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.