/* Passage de messages sysV IPC - le receveur recvmsg_sysV.c est censé fonctionner avec sendmsg_sysV : démarrage de recvmsg_sysV en arrière-plan, puis démarrage de sendmsg_sysV */ #include #include #include #include #include #include struct my_msg_st { long int my_msg_type; char some_text[BUFSIZ]; }; int main() { int run = 1; struct my_msg_st some_data; int msqid; long int msg_to_recv = 1; msqid = msgget( (key_t)1234, 0666 | IPC_CREAT); if (msqid == -1) { perror("msgget dans recvmsg_sysV impossible"); exit(EXIT_FAILURE); } while (run) { if (msgrcv(msqid, &some_data, BUFSIZ, msg_to_recv, 0) == -1) { perror("msgrcv dans recvmsg_sysV impossible"); exit(EXIT_FAILURE); } printf("Vous avez écrit : %s", some_data.some_text); if (strncmp(some_data.some_text, "fin", 3) == 0) { run = 0; } } if (msgctl(msqid, IPC_RMID, 0) == -1) { perror("msgctl dans recvmsg_sysV impossible"); exit(EXIT_FAILURE); } exit(EXIT_SUCCESS); }