管道的應用

2021-08-31 03:30:16 字數 1274 閱讀 4947

一、跨越fork呼叫的管道(在不同程序之間進行讀寫操作)

管道的真正優勢體現在,當你想在兩個程序之間傳遞資料的時候。當程式用fork呼叫建立新程序時,原先開啟的檔案描述符仍將保持開啟狀態,如果在原先的程序中建立乙個管道,然後再呼叫fork建立新程序,我們即可通過管道在兩個程序之間傳遞資料。

**實現:

#include#include#include#include#define bufsize 128

int main()

//在確認fork呼叫成功後,如果fork_result等於零,就說明我們是在子程序中

if(fork_result == 0)

else //否則,肯定是在父程序中

}exit(exit_success);

}

結果展示:

這個程式首先用pipe呼叫建立乙個管道,接著用fork呼叫建立乙個新程序。如果fork呼叫成功,父程序就寫資料到管道中,而子程序從管道中讀取資料。父程序都在只呼叫了一次write或read之後就退出。如果父程序在子程序之前退出,你就會在兩部分輸出內容之間看到shell提示符。

下面給出圖示幫助理解:

二、父程序和子程序

在接下來的對pipe呼叫的研究中,我們將討論如何在子程序中執行乙個與其父程序完全不同的另外乙個程式,而不是僅僅執行乙個相同程式,我們將使用exec呼叫來完成這一工作,這裡有乙個難點是通過exec呼叫的程序需要知道應該訪問哪個檔案描述符,上面的例子中,因為程序本身有file_pipes資料的乙份副本,所以這並不成為問題,但經過exec呼叫後,情況就不一樣了,因為原先的程序已經被新的子程序替換了,為解決這個問題,我們可以將檔案描述符(它實際上只是乙個數字)作為乙個引數傳遞給exec啟動的程式,為方便演示它是如何工作的,我們需要使用兩個程式,第乙個程式是資料生產者,它負責建立管道和啟動子程序,而後者是資料消費。

**實現:

#include#include#include#include#define bufsize 128

int main()

if(fork_result == 0)

else

}exit(exit_success);

}

(2)資料消費者程式pipe4.c負責讀取數

管道重定向的應用

簡述linux系統內,程序的優先順序概念。1 嘗試啟動乙個優先順序較高的sleep程序。2 使用renice修改該程式的優先順序。答 linux 系統中,每個cpu在乙個時間點上只能處理乙個程序,通過時間片技術,來同時執行多個程式。系統根據程序的優先順序進行cpu資源的分配。優先順序範圍是 20至1...

UNIX管道應用及Shell實現(三) 多管道實現

本篇主要介紹多管道實現,自己也寫得不好,希望大家多多指點。我在這篇文章中較詳細的講解了管道的實現,但當時只涉及到乙個管道,因此只需要關心對管道的read和write,並不需要關心read到什麼地方去。首先,我們在使用pipe建立管道後,需要fork乙個程序,子程序用於向管道寫,父程序用於向管道讀 注...

為IoT應用搭建DevOps管道

在msdn站點最近的一篇文章中,daniel meixler 了乙個針對物聯網 internet of things,iot 應用的完整devops生命週期,用到了微軟的框架和元件。這個理念稍作改動就可以泛化應用到其他iot平台上。一般來講,devops在web應用中最為流行,但它並不是與特定技術或...