共享内存和消息队列都是在进程间传递数据的工具。
消息队列也是队列的一种,在同一类型上先进先出,可以完成多进程间的通讯,每个数据都带有类型,读取数据的进程只会读取自己关注的类型的数据,并且同一种类型的数据在内存是分段存储的,读取端口一次只能读一段数据。
消息队列操作函数:
int msgget((key_t)key, int flag);
int msgsnd(int msgid, const void *ptr, int ntypes, int flag);
int msgrcv(int msgid, const void *ptr, int ntypes, long type, int flag);
共享内存是最快的一种IPC(进程间通讯),属于临界资源,使用时必须利用信号量进行进程同步控制。
共享内存操作函数:
int shmget((key_t)key, int size, int flag);
void *shmat(int shmid, void *addr, int flag);
int shmdt(void *addr);//给shmat的返回值,将虚拟地址与内存空间断开,不删除内核对象以及共享空间
int shmctl(int shmid, int cmd, struct shmid_ds *buf );