掌握Linux中IPC的秘诀(linuxipcs)

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。内容未经允许不得转载,或转载时需注明来源: 创新互联