linux系統程式設計 程序間通訊 pipe

2021-07-03 20:15:45 字數 1023 閱讀 7517

程序間通訊-pipe

每個程序各自有不同的使用者位址空間,任何乙個程序的全域性變數在另乙個程序中都看不到,所以程序之間要交換資料必須通過核心,在核心中開闢一塊緩衝區,程序1把資料從使用者空間拷到核心緩衝區,程序2再從核心緩衝區把資料讀走,核心提供的這種機制稱為程序間通訊(ipc,interprocess communication)。

管道(pipe)就是一項基本的程序間通訊的方法。

#include int pipe(int pipefd[2]);
使用pipe函式,就可以構建一條通訊管道。

pipefd是傳出引數,表示檔案描述符。pipefd[0]是管道的讀端,pipefd[1]是管道的寫端。

成功,返回0;出錯,返回-1。

管道的本質是環形佇列。

管道的通用使用模式是先pipe。再fork。於是,父子程序都各有了乙份管道的讀端和寫端。這表明父子程序本質上都可以讀寫管道,但使用中遵循唯讀只寫的習慣:父子程序要麼唯讀,要麼只寫。

#include #include #include #include void sys_err(char *s)

int main(void)

close(fd[0]);

} else

close(fd[1]);

} return 0;

}pipe size is 4096

zhangxiang 0

zhangxiang 1

zhangxiang 2

zhangxiang 3

zhangxiang 4

zhangxiang 5

^c

通過fpathconf函式可以獲取管道的大小(單位:位元組)。這個值不是固定的,與系統設定有關。

以上的示例中父程序關閉讀端,不斷地往管道中寫資料,子程序關閉寫端,不斷地從管道中讀資料。這是典型的父子程序通過管道通訊的方式。

父程序若是想讀,子程序若是想寫,則需另開闢一條管道進行通訊。

ccpp blog 目錄

Linux系統程式設計 程序間通訊 IPC

利用檔案進行程序間通訊的程式示例 include include include include include include intmain if pid 0 write fd1,str,strlen str printf child wrote over n if pid 0 sleep 1 ...

Linux系統程式設計 程序間通訊(一)

linux系統主要的程序間通訊機制如下 無名管道 pipe 及命名管道 named pipe 無名管道可用於具有父子關係程序間的通訊 命名管道用於無父子關係的程序之間的通訊。無父子關係的程序可將資訊傳送到某個命名管道中,通過管道名讀取資訊 訊號 signal 程序間的高階通訊方式,用於通知其他程序有...

系統程式設計 程序間通訊 概述

程序間通訊概述 1.什麼是程序間通訊?什麼是執行緒間通訊?程序間通訊 在使用者空間實現程序間通訊是不可能的,程序間通訊通過linux核心物件來實現。執行緒間通訊 這在使用者空間就可以實現,甚至可以通過全域性變數來通訊。2.有哪幾種程序間通訊方式?管道通訊 無名管道 有名管道 檔案系統中有名 訊號通訊...