IPC(Inter-process communication)是程序之间通信的一种重要方法。在linux系统中,IPC通信有以下几种方式:
一、管道(Pipe)
管道是最简单的一种IPC通信方式,主要实现连个进程之间的通信。
1.管道有两种,一种是有名管道(FIFO),另一种是无名管道(pipe)。
2.有名管道是一个特殊的文件,有访问和操作方法,可以实现多进程间的数据通信。
3.无名管道只能用于父子进程间的通信,不能用于兄弟进程间的通信,且管道有往管道里写数据,也可以从管道读出数据。
//有名管道的创建:
#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);
//待写入管道的数据
char str1[]=”Hello! I’m pipe!”;
write(fd, str1, strlen(str1));
}
二、消息队列(Message Queue)
消息队列是一种以特定的消息格式存放数据的一种任务处理机制。它可以实现不同进程间的数据传输,这是一种比较高级的IPC通信机制。
//消息队列的创建:
#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);
//希望往消息队列写入的数据
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)
信号量也被称为二值信号量,是一个相对较发较复杂的IPC通信方式,主要解决的是资源的共享和保护,它的实现主要是借助于进程同步的一种特殊机制。
//信号量的创建:
#include
#include
key_t key;
//创建一个键值
key=ftok(“/etc/profile”,’a’);
//根据键值创建一个信号量
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机制分别满足不同需求,可以按照不同情况来使用。
香港服务器选创新互联,2H2G首月10元开通。
创新互联(www.cdcxhl.com)互联网服务提供商,拥有超过10年的服务器租用、服务器托管、云服务器、虚拟主机、网站系统开发经验。专业提供云主机、虚拟主机、域名注册、VPS主机、云服务器、香港云服务器、免备案服务器等。
网站标题:掌握Linux中IPC的秘诀(linuxipcs)
分享地址:http://www.shufengxianlan.com/qtweb/news25/459675.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联