您的位置:首页 > 其它

IPC(进程间通信)机制

2015-08-08 12:14 267 查看
IPC三种通信机制是指:信号量、共享内存、消息队列。

信号量:通过操作系统中的PV操作来实现;

共享内存:申请一块内存,进程A往共享内存中写,其他的进程就可以通过读出共享内存中的内容来获取进程A所传送的信息;

消息队列:创建一个消息队列,进程A往队列里面写,那么进程B通过读队列中的容来获取进程A传送的信息。

具体的实现其实就是用三组函数来实现的,而且形式都是很有相似性的。

信号量:

#include

int semget(key_t key,int num_sems,int sem_flgs);

int semctl(int sem_id,int sem_num,int command...);

int semop(int sem_id,struct sembuf *sem_ops,size_t num_sem_ops);

每个函数的功能和参数的意义在手册中都能找到。

1、semget 创建一个信号量或者获取一个已知信号量的键

key:不相关的进程可以通过他来访问同一个信号量

num_sems:需要的信号量数目。几乎总是1

sem_flags:一组标志,例如IPC_CREAT;

返回值是信号量标志符,给其他信号量函数使用

2、semctl:

sem_id:信号量标志符,semget的返回值

sem_ops:信号量编号,一般取0

command: 就不解释了,在手册中有详细的解释,我就偷偷懒吧。

3、semop

用于改变信号量的值

struct sembuf{

short sen_nums; //信号量编号,一般取0

short sem_op; //一般-1是P操作,1是V操作

short sem_flag; //通常设置为UNDO

}

共享内存

允许两个不像关的进程访问同一个逻辑地址

#include

1、int shmget(key_t key,size_t size,int shmflag);

2、void *shmat(int shm_id,const void *shm_addr,int shm_flag);

3、int shmctl(int shm_id,int cmd,struct shmid_ds *buf);

4、int shmdt(const void *shm_addr);

参数的常用值:

1、shmflag:0666|IPC_CREAT

2、shmaddr=0 shm_flag=0

3、cmd=IPC_SET cmd=IPC_RMID

消息队列:

提供从一个进程向另一个进程发送一个数据块的方法

#include

int msgget(key_t key,int msgflg);

int msgctl(int magid,int cmd,struct msgid_ds *buf);

int msgsnd(int msgid,void *msg_ptr,size_t msg_sz,int msgflag);

int msgrcv(int msgid,void *msg_ptr,size_t msg_sz,long
int msg_type,int msgflag);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: