{}
run-icon
main.c
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/ipc.h> #include <sys/msg.h> #include <sys/types.h> #include <sys/wait.h> #include <unistd.h> #define MSG_KEY 1234 struct mensagem { long tipo; char texto[100]; }; int main() { int msgid; // Cria a fila de mensagens msgid = msgget(MSG_KEY, 0666 | IPC_CREAT); if (msgid == -1) { perror("msgget"); return 1; } pid_t pid = fork(); // Processo filho -> RECEIVER if (pid == 0) { struct mensagem msg_recebida; // Recebe mensagem msgrcv( msgid, &msg_recebida, sizeof(msg_recebida.texto), 1, 0 ); printf("\n[RECEIVER]\n"); printf("Mensagem recebida: %s\n", msg_recebida.texto); } // Processo pai -> SENDER else { struct mensagem msg_enviada; msg_enviada.tipo = 1; strcpy( msg_enviada.texto, "Olá! Mensagem enviada via fila!" ); sleep(1); // Envia mensagem msgsnd( msgid, &msg_enviada, sizeof(msg_enviada.texto), 0 ); printf("\n[SENDER]\n"); printf("Mensagem enviada: %s\n", msg_enviada.texto); wait(NULL); // Remove a fila msgctl(msgid, IPC_RMID, NULL); } return 0; }
Output