Linux應用程式設計 程序通訊

2021-10-05 18:41:34 字數 2551 閱讀 2636

通訊方式有管道pipe,訊號

一、pipe

管道分兩種無名管道,有名管道。

1、無名管道:

父程序和子程序可通過無名管道傳輸資料,管道有兩個口,一端寫一端讀,半雙工通訊。可以當作檔案進行操作,所以建立的管道會有兩個檔案描述符fds[0]和fds[1],fds[0]用於讀,fds[1]用於寫,關係如圖。

實驗:建立管道,再建立子程序,父程序將資訊傳送到子程序。

#include#include/*  定義資料型別,如  ssize_t,off_t 等  */

#include /* 定義 open,creat 等函式原型,建立檔案許可權的符號常量 s_irusr 等 */

#include /* 定義 read,write,close,lseek 等函式原型 */

#include /* 與全域性變數 errno 相關的定義 */

#include /* 定義 ioctl 函式原型 */

#include int main(int argc, char *ar**) ;

char buf[10] = ;

buf[9] = '\0';

if(pipe(pipefd) < 0) /*建立管道*/

pid = fork(); /* 建立程序 */

if (pid == 0) /* 對子程序返回 0 */

} exit(7);

} else

if(pid > 0) /*對父程序返回子程序 pid */

else

return 6;

} 輸入:

輸出:here is parent, my pid = 6164, child's pid = 6165

here is child, my pid = 6165, parent's pid = 6164

child exit

child return status value is 29590344

wait_pid is 6165

2、有名管道

它可以使互不相關的兩個程序實現彼此的通訊。它提供了乙個路徑與其關聯,以檔案形式存在於檔案系統中 。在建立有名管道後,就可以把它當作普通檔案來進行讀寫操作 。

建立有名管道的建立使用函式 mkfifo()

所需標頭檔案

#include

#include

函式原型

int mkfifo(const char *filename, mode_t mode)

函式傳入值

filename:要建立的管道

mode:

o_rdonly:讀管道

o_wronly:寫管道

o_rdwr:讀寫管道

o_nonblock:非阻塞

o_creat:如果該檔案不存在,那麼就建立乙個新的檔案,並

用第三的引數為其設定許可權

o_excl:如果使用 o_creat 時檔案存在,那麼可返回錯誤消

息。這一引數可測試檔案是否存在

函式返回值

成功:0

出錯:-1

實驗:建立兩個應用,乙個讀乙個寫,讀程式負責建立管道,將讀到的資料列印。

//讀端

#include#include/* 定義資料型別,如 ssize_t,off_t 等 */

#include /* 定義 open,creat 等函式原型,建立檔案許可權的符號常量 s_irusr 等 */

#include /* 定義 read,write,close,lseek 等函式原型 */

#include /* 與全域性變數 errno 相關的定義 */

#include /* 定義 ioctl 函式原型 */

#include #include #define fifo "/tmp/myfifo"

main(int argc,char** ar**)

while(1)

printf("read %s from fifo\n",buf);

sleep(1);

} pause();

unlink(fifo);

}

//寫端

/*fifo_write.c*/

#include #include #include #include #include #include #include #define fifo_server "/tmp/myfifo"

main(int argc, char** ar**)

else

printf("write %s to thefifo\n",buf);

}}

二、訊號

linux應用程式設計基礎 程序間通訊(IPC)

theme 程序間通訊 ipc author jeff.xue contact information contactmexkj 163.com 1.程序間通訊作用 2.通訊方式 3.管道通訊 1 管道 單向 先進先出 2 管道種類 3 無名管道 4 命名管道 fifo 不相干程序交換資訊 4.訊號...

Linux應用程式設計 09 程序間通訊 訊號通訊

訊號通訊 訊號是在軟體層次上對中斷機制的一種模擬,是一種非同步通訊方式訊號可以直接進行使用者空間程序和核心程序之間的互動,核心程序也可以利用它來通知使用者空間程序發生了哪些系統事件 如果該程序當前並未處於執行態,則該訊號就由核心儲存起來,直到該程序恢復執行再傳遞給它 如果乙個訊號被程序設定為阻塞,則...

Linux應用程式設計 11 程序間通訊 訊息佇列

向訊息佇列傳送訊息 msgsnd 從訊息佇列接收訊息 msgrcv 控制訊息佇列 msgctl 訊息佇列 示例 訊息佇列是system v ipc物件的一種 訊息佇列由訊息佇列id來唯一標識 訊息佇列就是乙個訊息的列表。使用者可以在訊息佇列中新增訊息 讀取訊息等 訊息佇列可以按照型別來傳送 接收訊息...