linux下程序間通訊的幾種主要手段簡介:
1 管道(pipe)及有名管道(named pipe):管道可用於具有親緣關係程序間的通訊,有名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係程序間的通訊;
2 訊號(signal):訊號是比較複雜的通訊方式,用於通知接受程序有某種事件發生,除了用於程序間通訊外,程序還可以傳送訊號給程序本身;linux除了支援unix早期訊號語義函式sigal外,還支援語義符合posix.1標準的訊號函式sigaction(實際上,該函式是基於bsd的,bsd為了實現可靠訊號機制,又能夠統一對外介面,用sigaction函式重新實現了signal函式);
3 報文(message)佇列(訊息佇列):訊息佇列是訊息的鏈結表,包括posix訊息佇列system v訊息佇列。有足夠許可權的程序可以向佇列中新增訊息,被賦予讀許可權的程序則可以讀走佇列中的訊息。訊息佇列克服了訊號承載資訊量少,管道只能承載無格式位元組流以及緩衝區大小受限等缺點。
4 共享記憶體:使得多個程序可以訪問同一塊記憶體空間,是最快的可用ipc形式。是針對其他通訊機制執行效率較低而設計的。往往與其它通訊機制,如訊號量結合使用,來達到程序間的同步及互斥。
5 訊號量(semaphore):主要作為程序間以及同一程序不同執行緒之間的同步手段。
6 套介面(socket):更為一般的程序間通訊機制,可用於不同機器之間的程序間通訊。起初是由unix系統的bsd分支開發出來的,但現在一般可以移植到其它類unix系統上:linux和system v的變種都支援套接字。
子程序寫,父程序讀。
pipe(fd[2])
fd[1]寫,fd[0]讀
#include
#include
#include
#define maxsize 100
int main()
else
if ((pid =fork()) < 0)
else
if (pid == 0)
else
return
0;}
mkfifo(「路徑名」,檔案許可權)
#include
#include
#include
#include
#include
#include
#define fifo "/home/fifo"
int main()
else
printf("create success!");
fd = open(fifo,o_rdwr);
if(fd == -1)
if(write(fd,"hello world",12) == -1)
else
printf("write success!\n");
if(read(fd,r_msg,bufsiz) == -1)
else
printf("receive data id %s !\n",r_msg);
close(fd);
return
0;}
shmget() 函式建立共享記憶體
shmat() 函式將共享記憶體新增到程序位址中
shmdt() 程序退出共享記憶體
shmctl() 對記憶體區域的操作
#include
#include
#include
#include
#include
#include
#include
#include
int main()
addr = (char *)shmat(shmid,null,0);
if (addr == (char *)(-1))
printf("share memory address %s\n",addr);
strcpy(addr,"welcome to mfcheer");
pid = fork();
if (pid == -1)
else
if (pid == 0)
else
if (shmctl(shmid,ipc_rmid,null) == -1)
}return
0;}
semget() 建立訊號量
semop() 訊號量操作
semctl() 訊號量的控制
Linux程序間通訊
程序間通訊 ipc interprocess communication 基本機制 訊號 管道及命名管道 訊息佇列 共享主存 訊號量 套接字。訊號 全稱軟中斷訊號,是在軟體層次上對中斷機制的一種模擬,它也是程序間通訊機制中唯一的非同步通訊機制。linux訊號處理函式可分為訊號安裝函式 訊號傳送函式和...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...
Linux程序間通訊
謝謝nonoob糾錯 我們在linux訊號基礎中已經說明,訊號可以看作一種粗糙的程序間通訊 ipc,interprocess communication 的方式,用以向程序封閉的記憶體空間傳遞資訊。為了讓程序間傳遞更多的資訊量,我們需要其他的程序間通訊方式。這些程序間通訊方式可以分為兩種 1.管道與...