關係程序的程序間通訊
父子關係
沒有關係的程序通過訊號進行通訊
管道比共享記憶體的實時性好
linux下預設遵守posix的程序間通訊匿名管道(管道pipe) 命名管道(fifo)
套接字 高階ipc 不同主機間通訊
管道通訊最常見的ipc方式
int pipe(int fd[2]);返回:成功為0 ,失敗為-1.管道的資料結構全部在核心空間完成;保護、安全。
管道通訊《他沒有自己的名字,所以叫匿名管道,只能拿到關聯到兩個檔案的檔案描述符》對管道的操作完全依賴這兩個檔案描述符。
**示例:
#include "io.h"
#include
int main(int argc, char
const *argv)
/*先建立好管道 ,再建立子程序,子程序會繼承父程序的堆區、棧區,否則不會繼承*/
pid_t pid = fork();
if (pid < 0)
else
if (pid == 0) ;
read(fds[0], buffer, 100);
printf("in child, buffer:%s\n", buffer);
} else
/*sleep(1);*/
/*管道要正常使用,必須保證兩端都開啟。
父程序要等待子程序,確保子程序讀完,讓他們把互動的過程完成,但是時間不一定,也沒有辦法打保票它完全成功,所以可以用wait*/
return
0;}
兄弟程序間的通訊,可以通過繼承父程序進行。
檔案的形式體現。
使用者可以看到有名管道的操作和檔案的操作一樣。遮蔽了關係程序,不需要限定關係程序。
管道破裂。break pipe.
注意:
寫資料之前要保證有人以唯讀的方式開啟。
#include "io.h"
int main(int argc, char
const *argv)
; fread(buffer, 1024, 1, fp);
printf("buffer:%s\n", buffer);
return
0;}
ipcs
ipcs -q 檢視訊息佇列
程序間通訊IPC
這兩天學習了 unix 的程序間通訊 ipc,這裡面有幾個很重要的基本概念,特別是訊息佇列和我的畢設很有關係,因此多說幾句。以前學習的程序間通訊方式,一般都是經由 fork 或exec 開啟檔案,或經過檔案系統。而 ipc是程序間通訊方式的統稱。下面一一道來。一 管道 管道是最老的 ipc形式。管道...
程序間通訊 IPC
part2 index1.html part2 index2.html linux至少支援如下ipc機制 同時支援posix和system v方式 streams ipc機制,linux本身不支援,有乙個單獨的安裝包 可以跨pc的程序通訊 互斥鎖或條件變數 動態初始化 不能使靜態分配 在共享記憶體中...
程序間通訊IPC
乙個大型的應用系統,往往需要眾多程序協作,程序間通訊的重要性顯而易見。首先,程序間通訊至少可以通過傳送開啟檔案來實現,不同的程序通過乙個或多個檔案來傳遞資訊,事實上,在很多應用系統裡,都使用了這種方法。但一般說來,程序間通訊 ipc interprocess communication 不包括這種似...