1. linux下程序間通訊方式有有那些?
1)管道( pipe ):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。
2)有名管道 (named pipe) : 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。
3)訊號量( semophore ) : 訊號量是乙個計數器,可以用來控制多個程序對共享資源的訪問。它常作為一種鎖機制,防止某程序正在訪問共享資源時,其他程序也訪問該資源。因此,主要作為程序間以及同一程序內不同執行緒之間的同步手段。
4)訊息佇列( message queue ) : 訊息佇列是由訊息的鍊錶,存放在核心中並由訊息佇列識別符號標識。訊息佇列克服了訊號傳遞資訊少、管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
5)訊號 ( sinal ) : 訊號是一種比較複雜的通訊方式,用於通知接收程序某個事件已經發生。
6)共享記憶體( shared memory ) :共享記憶體就是對映一段能被其他程序所訪問的記憶體,這段共享記憶體由乙個程序建立,但多個程序都可以訪問。共享記憶體是最快的 ipc 方式,它是針對其他程序間通訊方式執行效率低而專門設計的。它往往與其他通訊機制,如訊號兩,配合使用,來實現程序間的同步和通訊。
7)套接字( socket ) : 套解口也是一種程序間通訊機制,與其他通訊機制不同的是,它可用於不同及其間的程序通訊。
2.何為管道?
管道是程序間通訊中最古老的方式,它包括無名管道和有名管道兩種,前者用於父程序和子程序間的通訊,後者用於執行於同一臺機器上的任意兩個程序間的通訊。
3.如何建立乙個無名管道?
無名管道由pipe()函式建立:
#include
int pipe(int filedis[2]);
引數filedis返回兩個檔案描述符:filedes[0]為讀而開啟,filedes[1]為寫而開啟。filedes[1]的輸出是filedes[0]的輸入。2者輸入輸出順序不可改變。
4.如何建立乙個有名管道?
在linux系統下,有名管道可由兩種方式建立:命令列方式mknod系統呼叫和函式mkfifo。下面的兩種途徑都在當前目錄下生成了乙個名為myfifo的有名管道:
方式一:mkfifo("myfifo","rw");
方式二:mknod myfifo p
生成了有名管道後,就可以使用一般的檔案i/o函式如open、close、read、write等來對它進行操作。
5. 程序間利用訊號進行通訊,可以使用那些函式介面:
[cpp] view plain copy
/* 訊號傳送 */
/* kill.c */
#include
#include
#include
#include
#include
#include
int main()
else if(0 == pid)
else
return 0;
} /* signal.c */
#include
#include
#include
void func(int sig)
int main()
/* signal(); 用於對指定訊號進行指定處理 */
/* raise.c */
#include
#include
int main()
raise(sigint); //給當前訊號傳送終止訊號
while(1);
return 0;
} /* alarm.c */
#include
#include
#include
void func(int sig)
int main()
return 0;
}
Linux 程序間通訊1
一 程序間通訊概述 程序間通訊 在使用者空間實現程序通訊是不可能的,通過linux核心通訊 1.資料傳輸 乙個程序需要將它的資料傳送給另乙個程序 2.資源共享 多個程序之間共享同樣的資源 3.通知事件 乙個程序需要向另乙個或一組程序傳送訊息,通知它們發生了某種事件 4.程序控制 有些程序希望完全控制...
Linux 程序間通訊 1 管道
1.匿名管道 include 功能 建立匿名管道 int pipe int fd 2 引數fd 檔案描述符陣列,其中fd 0 表示讀端,fd 1 表示寫端 返回值 成功返回0,失敗返回 1管道並非屬於程序的資源,屬於作業系統,父子程序共享用於管道的檔案描述符,所以兩個程序通過作業系統提供的記憶體空間...
Linux 程序間通訊方式(1)
現在linux使用的程序間通訊方式包括 1 管道 pipe 和有名管道 fifo 2 訊號 signal 3 訊息佇列 4 共享記憶體 5 訊號量 6 套接字 在linux中,管道是一種使用頻繁地通訊機制,從本質上說,管道也是一種檔案,但他又和普通檔案有所不同,管道可以克服使用檔案進行通訊的兩個問題...