Linux
Application Development |
Michael K. Johnson Erik W. Troan |
/* mpx-blocks.c -- reads input from pipes p1, p2 alternately */ #include <fcntl.h> #include <stdio.h> #include <unistd.h> int main(void) { int fds[2]; char buf[4096]; int i; int fd; if ((fds[0] = open("p1", O_RDONLY)) < 0) { perror("open p1"); return 1; } if ((fds[1] = open("p2", O_RDONLY)) < 0) { perror("open p2"); return 1; } fd = 0; while (1) { /* if data is available read it and display it */ i = read(fds[fd], buf, sizeof(buf) - 1); if (i < 0) { perror("read"); return 1; } else if (!i) { printf("pipe closed\n"); return 0; } buf[i] = '\0'; printf("read: %s", buf); /* read from the other file descriptor */ fd = (fd + 1) % 2; } }