Linux下程序間通訊 管道

2021-10-05 05:34:10 字數 1957 閱讀 7341

管道是unix系統ipc的最古老的形式,所有的unix系統都提供此種通訊機制。管道的實質是乙個核心緩衝區,程序以先進 先出(fifo, first in first out)的方式從緩衝區訪問資料:管道一端的程序順序地將程序資料寫入緩衝區,另一端的程序則順 序地讀取資料,該緩衝區可以看做乙個迴圈佇列,讀和寫的位置都是自動增加的,乙個資料只能被讀一次,讀出以後再緩衝區都 不復存在了。當緩衝區讀空或者寫滿時,有一定的規則控制相應的讀程序或寫程序是否進入等待佇列,當空的緩衝區有新資料寫 入或慢的緩衝區有資料讀出時,就喚醒等待佇列中的程序繼續讀寫。

1,半雙工,資料只能在乙個方向流動,現在有些系統可以支援全雙工管道,但是為了最佳的可移植性,應認為系統 不支援全雙工管道;

2,管道只能在具有公共祖先之間的兩個程序之間使用;

管道可以看成是一種特殊的檔案,對於它的讀寫也可以使用普通的read、write 等函式。但是它不是普通的檔案,並不 屬於其他任何檔案系統,並且只存在於記憶體中。管道是通過呼叫pipe函式建立的。

#include

intpipe

(int fd[2]

);//返回值:若成功,返回0,若出錯,返回-1.

經由引數fd返回的兩個檔案描述符:fd[0]為讀而開啟,fd[1]為寫而開啟,fd[1]的輸出是fd[0]的輸入。

通常,程序會先呼叫pipe,接著呼叫fork,從而建立了父程序與子程序的ipc通道,如圖。

fork之後做什麼取決於我們想要的資料流的方向,對於從父程序到子程序,父程序關閉管道的讀端fd[0],子程序關閉寫端 fd[1],如圖。

;//fork 建立子程序

if(pid <0)

else

if(pid >0)

//父程序

printf

("the parent write %d bytes form pipe_fd[%d] to pipe_fd[%d].\n"

,rv, pipe_fd[1]

, pipe_fd[0]

);wait

(wait_status)

;//等待子程序結束

puts

("the parent wait child exit and will exit.");

}elseif(

0== pid)

//子程序

Linux下程序間通訊 管道通訊

1.程序間通訊 ipc inter process communication 比較好理解概念的就是程序間通訊就是在不同程序之間傳播或交換資訊。2,linux下ipc機制的分類 管道 訊號 共享記憶體 訊息佇列 訊號量 套接字 我今天主要想講的是管道通訊 管道通訊特點 1 管道是最古老的ipc,但目...

Linux程序間通訊 管道

linux程序間通訊機制 1.同一主機程序間通訊機制 unix方式 有名管道fifo 無名管道pipe 訊號signal systemv方式 訊號量 訊息佇列 共享記憶體 2.網路通訊 rpc remote procedure call socket 管道管道是程序間通訊中最古老的方式,它包括無名管...

Linux程序間通訊 管道

管道 管道是一種最基本的程序間通訊機制,由pipe函式建立 include intpipe int filedes 2 呼叫pipe函式時在核心中開闢一塊緩衝區 稱為管道 用於通訊,它有乙個讀端乙個寫端,然後通過filedes引數傳出給使用者程式兩個檔案描述符,filedes 0 指向管道的讀端,f...