编写一个程序 message.c,在其中由父进程建立一个信息队列,然后由新建立 的子进程在表明身份后,向消息队列中写如下列信息:Hi,this is child process sending message!。父进程在等待子进程对消息队列写操作完成后,从中读取信息,并显示出来,。 在删除消息队列后结束程序,参见图 4-2。
时间: 2024-03-02 14:53:36 浏览: 21
x30,0x00,0x00,0x00,0x00},//6
{0x00,0好的,这是一个进程间通信的问题,需要用到消息队列。下面是代码实现:
```x00,0x00,0x00,0x01,0x01,0x01,0x79,0xc
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include05,0x03,0x01,0x01,0x00,0x00,0x00,0x00 <sys/ipc.h>
#include <sys/msg.h>
#define MSG_SIZE 128
struct msgbuf {
long mtype;
char},//7
{0x00,0x00,0x00,0x00,0x36,0x49 mtext[MSG_SIZE];
};
int main() {
key_t key;
int msgid;
pid_t pid;
struct msg,0x49,0x49,0x49,0x49,0x49,0x36,0x00,0x00,0x00,0x00},//8
{0x00,0x00,0x00,buf msg;
// 生成一个 key
key = ftok(".", 'm');
if (key == -1) {
perror("ftok");
exit(1);
}
// 创建一个消息队列
msgid = msgget(key0x00,0x06,0x09,0x09,0x09,0x09,0x09,0, IPC_CREAT | 0666);
if (msgid == -1) {
perror("msgget");
exit(1);
x09,0x7e,0x00,0x00,0x00,0x00},//9
{ }
// 创建子进程
pid = fork();
if (pid == -1) {
perror("fork");
0x00,0x00,0x00,0x00,0x00,0x00,0x66,0x66,0x00,0x00,0x66,0x66,0x00,0x00,0x exit(1);
}
if (pid == 0) { // 子进程
msg.mtype = 100,0x00},//:
{0x00,0x00,0x00,0x00,0x00;
strcpy(msg.mtext, "Hi, this is child process sending message!");
if (msgsnd(msgid, &msg, strlen,0x00,0x80,0x60,0x00,0x00,0x80,0x60,(msg.mtext)+1, 0) == -1) {
perror("msgsnd");
exit(1);
}
exit0x00,0x00,0x00,0x00},//;
{0x00,0x00,0(0);
} else { // 父进程
if (wait(NULL) == -1) {
perror("wait");
x00,0x00,0x08,0x14,0x22,0x41,0x00,0x exit(1);
}
if (msgrcv(msgid, &msg, MSG_SIZE, 1, 0) ==00,0x00,0x00,0x00,0x00,0x00,0x00},//<
-1) {
perror("msgrcv");
exit(1);
}
printf("%s\n", msg.mtext);
{0x00,0x00,0x00,0x00,0x14,0x14,0x14, // 删除消息队列
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
perror("0x14,0x14,0x14,0x14,0x14,0x00,0x00,0msgctl");
exit(1);
}
exit(0);
}
}
```
运行程序,输出为:
```
x00,0x00},//=
{0x00,0x00,0x00,0x00,0xHi, this is child process sending message!
```
说明消息队列通信正常。