//--------------------------------------------------------- // com.msg.cc //--------------------------------------------------------- #include "check.h" // check #include // assert #include // strlen #include // cout #include // msgget, msgsnd, msgrcv #include // wait #include // fork //--------------------------------------------------------- int main() { struct msgbuf { long mtype; char mtext[1]; } msg = {1, {'\0'}}; int msgid = check(msgget(IPC_PRIVATE, 0600)); if (check(fork())) // parent/reader { std::cout << "parent/reader: "; do { check(msgrcv(msgid, &msg, 1, 1, 0)); std::cout << msg.mtext[0]; } while (msg.mtext[0] != '\0'); // ¿fin de mensaje? wait(nullptr); } else // child/writer { std::cout << " child/writer: "; for (char c = 'a'; c <= 'z'; ++c) { msg.mtext[0] = c; check(msgsnd(msgid, &msg, 1, 0)); std::cout << msg.mtext[0]; } msg.mtext[0] = '\0'; // fin de mensaje check(msgsnd(msgid, &msg, 1, 0)); } std::cout << std::endl; } //---------------------------------------------------------