#include #include #include #include #include #include #include int main(int argc, char* argv[]) { struct mq_attr mqattrs = { .mq_maxmsg = 10, .mq_msgsize = 128, }; mqd_t mq = mq_open("/spqueue", O_RDWR | O_CREAT, 0700, &mqattrs); char buf[128]; pid_t fp = fork(); if (fp == 0) { // child int file = open(argv[1], O_RDONLY); int amount = 0; while ((amount = read(file, buf, 128))) { if (amount < 128) buf[amount] = '\0'; mq_send(mq, buf, 128, 0); } close(file); } else { while (!waitpid(fp, NULL, WNOHANG)) { mq_receive(mq, buf, 128, NULL); printf("%s", buf); } mq_getattr(mq, &mqattrs); while (mqattrs.mq_curmsgs-- > 0) { mq_receive(mq, buf, 128, NULL); printf("%s", buf); } } mq_close(mq); if (fp != 0) mq_unlink("/spqueue"); return 0; }