IPC三种通讯方式详解

来源:互联网 发布:msvcp120.dll丢失知乎 编辑:程序博客网 时间:2024/06/05 21:50

IPC对象:消息队列、共享内存、信号灯

Ipcs命令:用来查看IPC对象–m共享内存  -q消息队列  -s信号灯

Ipcrm命令:–m共享内存  -q消息队列  -s信号灯  ID :删除某个IPC对象

 

都要依靠key来创建,通过ftok获得一个key

Ftok(路径,(1-255));创建一个key。

 

消息队列:消息的链表。

Msgget(key,创建/打开方式):创建消息队列/获得消息队列ID。

第二个参数:IPC_CREAT|0666   IPC_EXCL,也可以为0.

Msgsnd(消息队列ID,消息结构体,消息正文大小,0):发送消息

消息结构体struct xxx{ long type消息类型; char text[]消息正文}

Msgrcv(消息队列ID,消息结构体,消息正文大小,想接受的消息类型,0(阻塞)/IPC_NOWAIT(非阻塞)):接受消息。

Msgctl(消息队列ID,IPC_RMID,NULL):删除消息队列

 

共享内存:在内存上开辟一段空间,映射到进程的地址空间来用

Shmget(key,共享内存的大小,方式)。创建共享内存/获得ID。

Shmat(共享内存ID,NULL(系统指定映射地址),0(可以读写));需要一个指针来指向映射地址,。

Shmdt(地址);取消映射

Shmctl(ID,IPC_RMID,NULL)。删除共享内存。

 

信号灯:也叫信号量,进行进程间共享资源的保护,进程间的控制。

Semget(key,信号灯数量,同上);创建信号灯/获得信号灯ID

Semop(ID,sembuf,操作的信号量个数);

         StructSembuf{信号量编号,操作方式(-1:P操作申请资源;+1:V操作释放资源),SEM_UNDO达到阻塞效果}

Semctl(ID,信号量编号,控制,unionsemun某个成员);

控制:SETVAL:设置信号灯的初始值。

                   IPC_RMID删除

0 0
原创粉丝点击