新聞中心
IPC(Inter-process communication)是程序之間通信的一種重要方法。在linux系統(tǒng)中,IPC通信有以下幾種方式:

一、管道(Pipe)
管道是最簡單的一種IPC通信方式,主要實現(xiàn)連個進程之間的通信。
1.管道有兩種,一種是有名管道(FIFO),另一種是無名管道(pipe)。
2.有名管道是一個特殊的文件,有訪問和操作方法,可以實現(xiàn)多進程間的數(shù)據(jù)通信。
3.無名管道只能用于父子進程間的通信,不能用于兄弟進程間的通信,且管道有往管道里寫數(shù)據(jù),也可以從管道讀出數(shù)據(jù)。
//有名管道的創(chuàng)建:
#include
#include
#include
#include
#include
void main(){
int fd;
if(mkfifo(“fifo”,0777)
printf(” Creat fifo error!\n”);
}
if((fd=open(“fifo”,O_WRONLY))
printf(” open fifo error!\n”);
}
printf(“fd = %d \n”,fd);
//待寫入管道的數(shù)據(jù)
char str1[]=”Hello! I’m pipe!”;
write(fd, str1, strlen(str1));
}
二、消息隊列(Message Queue)
消息隊列是一種以特定的消息格式存放數(shù)據(jù)的一種任務(wù)處理機制。它可以實現(xiàn)不同進程間的數(shù)據(jù)傳輸,這是一種比較高級的IPC通信機制。
//消息隊列的創(chuàng)建:
#include
#include
int main(){
int msg_id;
KEY_t key;
key=ftok(“/etc/profile”,’a’);
msg_id=msgget(key,IPC_CREAT);
printf(“%d \n”,msg_id);
//希望往消息隊列寫入的數(shù)據(jù)
char message[]=”It’s a message!”;
struct message{
long type;
char text[100];
}msg;
msg.type=3;
strcpy(msg.text,message);
//寫入消息隊列
msgsnd(msg_id,(void *)&msg,sizeof(msg),IPC_NOWAIT);
return 0;
}
三、信號量(Semaphore)
信號量也被稱為二值信號量,是一個相對較發(fā)較復(fù)雜的IPC通信方式,主要解決的是資源的共享和保護,它的實現(xiàn)主要是借助于進程同步的一種特殊機制。
//信號量的創(chuàng)建:
#include
#include
key_t key;
//創(chuàng)建一個鍵值
key=ftok(“/etc/profile”,’a’);
//根據(jù)鍵值創(chuàng)建一個信號量
int sem_id=semget(key,1,IPC_CREAT);
//對信號量進行初始化
union semum{
int val;
};
union semum sem_arg;
sem_arg.val=1;
semctl(sem_id,0,SETVAL,sem_arg);
以上就是Linux中IPC的秘訣,三種不同IPC機制分別滿足不同需求,可以按照不同情況來使用。
香港服務(wù)器選創(chuàng)新互聯(lián),2H2G首月10元開通。
創(chuàng)新互聯(lián)(www.cdcxhl.com)互聯(lián)網(wǎng)服務(wù)提供商,擁有超過10年的服務(wù)器租用、服務(wù)器托管、云服務(wù)器、虛擬主機、網(wǎng)站系統(tǒng)開發(fā)經(jīng)驗。專業(yè)提供云主機、虛擬主機、域名注冊、VPS主機、云服務(wù)器、香港云服務(wù)器、免備案服務(wù)器等。
網(wǎng)站名稱:掌握Linux中IPC的秘訣(linuxipcs)
文章轉(zhuǎn)載:http://fisionsoft.com.cn/article/djcojjd.html


咨詢
建站咨詢
