程序間通訊-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.有哪幾種程序間通訊方式?管道通訊 無名管道 有名管道 檔案系統中有名 訊號通訊...