IPC_STAT:该命令用来获取消息队列对应的msqid_ds数据结构,并将其保存到buf指向的地址空间 IPC_SET:该命令用来设置消息队列的属性,要设置的属性存储在buf中,可设置的属性包括: msg_perm.uid 、 msg_perm.gid、msg_perm.mode以及msg_qbytes IPC_RMID:从内核中删除msgqid标识的消息队列 struct msqid_ds { struct ...
IPC_RMID:删除消息队列。 IPC_INFO:读取消息队列基本情况。此命令等同于 ipcs 命令。 这4 条命令(IPC_STAT、IPC_SET、IPC_INFO 和 IPC_RMID)也可用于信号量和共享存储。 buf:临时的 msqid_ds 结构体类型的变量。用于存储读取的消息队列属性或需要修改的消息队列属性。 举例:msgctl(qid, IPC_RMID, NULL) //...
1.删除消息队列 ret = msgctl(msg_id , IPC_RMID,NULL); //不保存消息队列的属性用NULL 2.保存消息队列 struct msqid_ds tmp; ret = msgctl(msg_id , IPC_STAT,&tmp);//保存消息队列的属性 3.设置结构体属性 struct msqid_ds tmp; ret = msgctl(msg_id , IPC_SET,&tmp);//设置消息队列的属性(...
-`IPC_RMID`:删除消息队列。 - `buf`:msqid_ds 结构体的指针,用于传递和接收消息队列的状态信息。 下面是 msgctl 的一些常用用法: 1.获取消息队列的状态信息。 ```。 int msgid;。 struct msqid_ds buf;。 int ret = msgctl(msgid, IPC_STAT, &buf);。 if (ret == -1) 。 perror("msgctl");。
if (msgctl(msqid, IPC_RMID, NULL) == -1) { perror('msgctl'); exit(EXIT_FAILURE); } ``` 其中,IPC_RMID命令后面的NULL表示不需要获取IPC对象的信息。 3.修改IPC对象 使用msgctl函数的IPC_SET命令可以修改IPC对象的信息。例如,可以使用下面的代码修改一个消息队列的权限: ``` #include <sys/types....
16、flag = msgrcv( msqid, &buf1, recvlength ,3,0 ) ; if ( flag 0 ) perror(recv message error) ; return -1 ; printf(type=%d, message=%sn, buf1.mtype, buf1.mtext) ; flag = msgctl( msqid, IPC_RMID,NULL) ; if ( flag 0 ) perror(rm message queue error) ; return -1 ; ...
功能:消息队列的控制函数 参数 msqid: 由msgget函数返回的消息队列标识码 cmd:是将要采取的动作,(有三个可取值) 返回值:成功返回0,失败返回-1 cmd 的取值如下: 我们可以通过ipcrm -q 删除一条消息队列,也可以通过msgctl 函数删除,此时设置cmd 为 IPC_RMID,如下: ...
( msqid, buf1, recvlength ,3,0 ) ; if ( flag 0 ) { perror(recv message error) ; return -1 ; } printf(type=%d, message=%s\n, buf1.mtype, buf1.mtext) ; flag = msgctl( msqid, IPC_RMID,NULL) ; if ( flag 0 ) { perror(rm message queue error) ; return -1 ; } system(...
消息队列函数(msgget、msgctl、msgsnd、msgrcv)及其范例
EEXIST:key指定的消息队列已存在,而msgflg中同时指定IPC_CREAT和IPC_EXCL标志 ENOENT:key指定的消息队列不存在同时msgflg中没有指定IPC_CREAT标志 ENOMEM:需要建立消息队列,但内存不足 ENOSPC:需要建立消息队列,但已达到系统的限制 如果用msgget创建了一个新的消息队列对象时,则msqid_ds结构成员变量的值设置如下...