IPC--消息队列 message queue --msgctl 函数(创建 删除 查看 综合运用)

/*
 * msghandler.c
 *
 *  Created on: 2011-11-15
 *      Author: snape
 */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#include <fcntl.h>
#include <unistd.h>

//usage : msghandler KEY [c|d]
// KEY指定消息队列得关键字 c为创建 d为删除
int main(int argc, char **argv) {
	int KEY;
	if (argc != 2 && argc != 3) {
		fprintf(stderr, "usage : msghandler KEY [c|d]\n");
		exit(1);
	}

	KEY = atoi(argv[1]);
	printf("%x\n",KEY);
	//查看ipc 消息队列信息
	if (argc == 2) {
		execlp("ipcs", "ipcs", NULL);
		exit(0);
	}
	//创建
	if (argc == 3 && strcmp(argv[2], "c") == 0) {
		if (msgget(KEY, 0666 | IPC_CREAT | IPC_EXCL) < 0) {
			fprintf(stderr, "create message queue %x error!\n", KEY);
			exit(1);
		} else {
			fprintf(stderr, "creat message queue %x success!\n", KEY);
			//execlp("ipcs", "ipcs", NULL);
			exit(0);
		}
	}

	//删除
	if (argc == 3 && strcmp(argv[2], "d") == 0) {
		if ((msgctl(msgget(KEY, 0666), IPC_RMID, NULL)) < 0) {
			fprintf(stderr, "delete message queue %x error!\n", KEY);
			exit(1);
		} else {
			fprintf(stderr, "delete message queue %x success!\n", KEY);
			//execlp("ipcs", "ipcs", NULL);
			exit(0);

		}
	}
	return 0;
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Linux消息队列Message Queue)是一种进程间通信(Inter-Process Communication,IPC)机制,它允许不同的进程在系统内存中共享数据。消息队列提供了一种高效、可靠的方式来在不同的进程之间传递消息。 msgctl()函数是Linux消息队列控制函数之一,它用于对消息队列进行管理操作。它允许您获取队列的状态信息、创建队列、删除队列、对队列进行监听和关闭等操作。 以下是一些常见的msgctl()函数的使用方法: 1. 查看队列状态信息:使用msgctl()函数可以获取消息队列的状态信息,包括队列的长度、剩余空间、已发送和已接收的消息数量等。 ```c #include <sys/msg.h> struct msqid_ds message_queue; int rc = msgctl(mqid, IPC_STAT, &message_queue); if (rc == -1) { perror("msgctl"); } else { // 处理消息队列状态信息 } ``` 2. 创建消息队列:使用msgctl()函数可以创建一个新的消息队列,并返回一个消息队列标识符(mqid)。 ```c #include <sys/msg.h> struct msgbuf { long mtype; char mtext[256]; }; struct msqid_ds message_queue; int rc = msgctl(mqid, IPC_CREAT | IPC_EXCL, &message_queue); if (rc == -1) { perror("msgctl"); } else { // 成功创建消息队列,可以使用mqid标识符进行后续操作 } ``` 3. 删除消息队列:使用msgctl()函数可以删除指定的消息队列。 ```c int rc = msgctl(mqid, IPC_RMID, NULL); if (rc == -1) { perror("msgctl"); } else { // 成功删除消息队列 } ``` 4. 对消息队列进行监听:使用msgctl()函数可以设置一个回调函数,当有新消息到达时,该回调函数将被调用。 ```c #include <sys/msg.h> struct msqid_ds message_queue; int rc = msgctl(mqid, IPC_NOWAIT, &message_queue); if (rc == -1) { perror("msgctl"); } else { // 设置回调函数,当有新消息到达时,回调函数将被调用 } ``` 需要注意的是,msgctl()函数的参数较多,具体的使用方法可以参考Linux系统提供的man手册或相关文档。同时,在使用消息队列时,还需要考虑消息的发送和接收、消息的优先级、消息的超时等问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值