c编写两个独立的程序: Jack和Rose。利用消息队列,实现他们之间的对话.要求: 可以以任意次序启动 Jack和 Rose。 Jack 和 Rose 可以随时互相发送和接收消息。. 。可以任意启动和关闭程序,只要都启动了,就可以通信
时间: 2024-04-14 22:27:20 浏览: 25
你可以使用消息队列来实现 Jack 和 Rose 之间的对话。在 C 语言中,你可以使用 POSIX 消息队列来实现这个功能。下面是一个简单的示例代码,演示了如何使用消息队列实现 Jack 和 Rose 的对话:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#define MAX_MESSAGE_SIZE 100
struct message {
long type;
char text[MAX_MESSAGE_SIZE];
};
int main() {
key_t key;
int msgid;
pid_t pid;
// 创建唯一的键值
key = ftok(".", 'Q');
if (key == -1) {
perror("ftok");
exit(1);
}
// 创建消息队列
msgid = msgget(key, IPC_CREAT | 0666);
if (msgid == -1) {
perror("msgget");
exit(1);
}
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork");
exit(1);
}
if (pid == 0) {
// 子进程为 Jack,接收消息并打印
struct message msg;
while (1) {
msgrcv(msgid, &msg, sizeof(struct message) - sizeof(long), 1, 0);
printf("Jack: %s\n", msg.text);
}
} else {
// 父进程为 Rose,发送消息
struct message msg;
while (1) {
printf("Rose: ");
fgets(msg.text, sizeof(msg.text), stdin);
msg.type = 1;
msgsnd(msgid, &msg, sizeof(struct message) - sizeof(long), 0);
}
}
// 销毁消息队列
msgctl(msgid, IPC_RMID, NULL);
return 0;
}
```
你可以将上述代码保存到一个名为 `chat.c` 的文件中,并使用以下命令进行编译:
```
gcc -o chat chat.c
```
然后,你可以启动两个终端窗口,分别运行 Jack 和 Rose:
```
./chat
```
现在,你可以在终端窗口中输入消息,它们将通过消息队列传递给对方。请注意,你可以在任意顺序下启动和关闭程序,只要两个程序都在运行,它们就可以进行通信。