3. 设计一个程序,要求用函数msgget创建消息队列,从键盘输入的字符串添加到消息队列,然后应用函数msgrcv读取队列中的消息并在计算机屏幕上输出。程序先调用msgget函数创建、打开消息队列,接着调用msgsnd函数,把输入的字符串添加到消息队列中,然后调用msgrcv函数,读取消息队列中的消息并打印输出,最后调用msgctl函数,删除系统内核中的消息队列。
时间: 2024-01-21 22:18:57 浏览: 85
下面是一个简单的实现过程:
```
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
#define MAX_MSG_LEN 1024
struct msgbuf {
long mtype;
char mtext[MAX_MSG_LEN];
};
int main() {
int msgid;
key_t key;
struct msgbuf buf;
int len;
// 生成一个key
key = ftok(".", 'a');
if (key == -1) {
perror("ftok");
exit(1);
}
// 创建消息队列
msgid = msgget(key, IPC_CREAT|0666);
if (msgid == -1) {
perror("msgget");
exit(1);
}
// 从键盘输入字符串并发送到消息队列
printf("请输入要发送的消息:\n");
fgets(buf.mtext, MAX_MSG_LEN, stdin);
buf.mtype = 1;
len = strlen(buf.mtext);
if (msgsnd(msgid, &buf, len, 0) == -1) {
perror("msgsnd");
exit(1);
}
// 读取消息队列中的消息并打印输出
if (msgrcv(msgid, &buf, MAX_MSG_LEN, 0, 0) == -1) {
perror("msgrcv");
exit(1);
}
printf("接收到的消息:%s\n", buf.mtext);
// 删除消息队列
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
perror("msgctl");
exit(1);
}
return 0;
}
```
这个程序首先生成一个key,然后调用msgget函数创建一个消息队列。接着从键盘输入一个字符串,将其放入msgbuf结构体中并设置mtype为1,然后调用msgsnd函数将其发送到消息队列中。
接下来调用msgrcv函数从消息队列中读取消息,存入msgbuf结构体中,并输出到计算机屏幕上。最后,调用msgctl函数删除消息队列。
阅读全文