Linux下進(jìn)程間通信
Linux下進(jìn)程間通信大致有以下幾種:
1.socket
2.管道(包括匿名管道適用于父子進(jìn)程,命名管道)
3.信號(hào)量
4.共享內(nèi)存
5.消息隊(duì)列
1.socket
socket可以用于本地進(jìn)程間通信也可以用于遠(yuǎn)程間,是最常用的。
2.管道--匿名管道
一般用pipe創(chuàng)建,在父子間通信。在父進(jìn)程中關(guān)閉讀/寫(xiě)管道,在子進(jìn)程中關(guān)閉寫(xiě)/讀管道。
2.管道--命名管道
一般用mkfifo來(lái)創(chuàng)建。如果沒(méi)有說(shuō)明管道是非阻塞的,那么一個(gè)為讀打開(kāi)的管道將阻塞直到有進(jìn)程為寫(xiě)打開(kāi)此FIFO。同樣如果為寫(xiě)打開(kāi)的管道將阻塞直到有進(jìn)程為讀打開(kāi)此FIFO。
3.信號(hào)量
一個(gè)進(jìn)程可以用kill發(fā)送信號(hào)至另外一個(gè)進(jìn)程。
4.共享內(nèi)存
使用函數(shù):shmget、shmat、shmctl、shmdt
用shmget函數(shù)得到一塊內(nèi)存,并用shmat設(shè)置為允許本進(jìn)程使用這塊共享內(nèi)存。使用完以后用shmdt刪除內(nèi)存塊。
5.消息隊(duì)列
使用函數(shù):msgget、msgsnd、msgrcv、msgctl
使用步驟同上。
【編輯推薦】