1.使用消息队列完成两个进程之间相互通信
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
struct msgbuf {
long mtype;
char mtext[1024];
};
#define SIZE (sizeof(struct msgbuf) - sizeof(long))
int main() {
key_t key = ftok("/", 'z');
if (key == -1) {
perror("ftok");
exit(EXIT_FAILURE);
}
int msgid = msgget(key, IPC_CREAT | 0664);
if (msgid == -1) {
perror("msgget");
exit(EXIT_FAILURE);
}
struct msgbuf buf;
buf.mtype = 1;
while (1) {
printf("Enter message to send (type 'quit' to exit): ");
fgets(buf.mtext, sizeof(buf.mtext), stdin);
buf.mtext[strcspn(buf.mtext, "\n")] = '\0';
msgsnd(msgid, &buf, SIZE, 0);
if (strcmp(buf.mtext, "quit") == 0) {
break;
}
}
exit(EXIT_SUCCESS);
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <sys/msg.h>
struct msgbuf {
long mtype;
char mtext[1024];
};
#define SIZE (sizeof(struct msgbuf) - sizeof(long))
int main() {
key_t key = ftok("/", 'z');
if (key == -1) {
perror("ftok");
exit(EXIT_FAILURE);
}
int msgid = msgget(key, IPC_CREAT | 0664);
if (msgid == -1) {
perror("msgget");
exit(EXIT_FAILURE);
}
struct msgbuf buf;
while (1) {
msgrcv(msgid, &buf, SIZE, 1, 0);
printf("Received message: %s\n", buf.mtext);
if (strcmp(buf.mtext, "quit") == 0) {
break;
}
}
if (msgctl(msgid, IPC_RMID, NULL) == -1) {
perror("msgctl");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}