Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <unistd.h>
- #define NUM 10000000
- void
- child(int wfd, int rfd)
- {
- int i;
- for (i = 1; i <= NUM; i++) {
- int n;
- n = write(wfd, &i, sizeof i);
- if (n != sizeof i) {
- fprintf(stderr, "write\n");
- }
- n = read(rfd, &i, sizeof i);
- if (n != sizeof i) {
- fprintf(stderr, "read\n");
- }
- }
- }
- void
- parent(int wfd, int rfd)
- {
- for (;;) {
- int i, n;
- n = read(rfd, &i, sizeof i);
- if (n != sizeof i) {
- fprintf(stderr, "read\n");
- }
- n = write(wfd, &i, sizeof i);
- if (n != sizeof i) {
- fprintf(stderr, "write\n");
- }
- if ((i % (NUM / 1000)) == 0) {
- fprintf(stderr, "%d\n", i);
- }
- if (i == NUM) {
- fprintf(stderr, "done\n");
- break;
- }
- }
- }
- int
- main(int ac, char *av[])
- {
- int fds_a[2], fds_b[2];
- if (pipe(fds_a) < 0) {
- fprintf(stderr, "pipe\n");
- return EXIT_FAILURE;
- }
- if (pipe(fds_b) < 0) {
- fprintf(stderr, "pipe\n");
- return EXIT_FAILURE;
- }
- pid_t pid = fork();
- if (pid < 0) {
- fprintf(stderr, "pipe\n");
- return EXIT_FAILURE;
- }
- if (pid == 0) {
- close(fds_a[0]);
- close(fds_b[1]);
- child(fds_a[1], fds_b[0]);
- } else {
- close(fds_a[1]);
- close(fds_b[0]);
- parent(fds_b[1], fds_a[0]);
- }
- return EXIT_SUCCESS;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement