#include #include #include #include #include #include #include #include #define FIFO "myfifo" #define BIGDATASIZE (1024 * 1024 * 16) int main() { int fd; pid_t pid; int ret, errn; char *pbuf; assert(unlink(FIFO) == 0 || errno == ENOENT); assert(mkfifo(FIFO, 0664) == 0); pid = fork(); if (pid == 0) { char buf[512]; fd = open(FIFO, O_RDONLY); if (fd == -1) { printf("child: can not open %s\n", FIFO); return (1); } ret = read(fd, buf, sizeof(buf)); printf("child: read %d bytes\n", ret); close(fd); return (0); } /* parent */ signal(SIGPIPE, SIG_IGN); fd = open(FIFO, O_WRONLY); if (fd == -1) { printf("parent: can not open %s\n", FIFO); return (1); } pbuf = malloc(BIGDATASIZE); ret = write(fd, pbuf, BIGDATASIZE); printf("parent: first write return=%d\n", ret); ret = write(fd, pbuf, BIGDATASIZE); errn = errno; printf("parent: second write return=%d\n", ret); if (ret == -1) printf("parent: %s\n", strerror(errn)); return (0); }