程序間通訊IPC

2021-08-10 22:14:37 字數 1221 閱讀 6542

關係程序的程序間通訊

父子關係

沒有關係的程序通過訊號進行通訊

管道比共享記憶體的實時性好

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 不包括這種似...