Advertisement
Guest User

calls2.c

a guest
Apr 10th, 2012
395
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <unistd.h>
  4.  
  5. #define NUM 10000000
  6.  
  7. void
  8. child(int wfd, int rfd)
  9. {
  10.         int i;
  11.         for (i = 1; i <= NUM; i++) {
  12.                 int n;
  13.  
  14.                 n = write(wfd, &i, sizeof i);
  15.                 if (n != sizeof i) {
  16.                         fprintf(stderr, "write\n");
  17.                 }
  18.  
  19.                 n = read(rfd, &i, sizeof i);
  20.                 if (n != sizeof i) {
  21.                         fprintf(stderr, "read\n");
  22.                 }
  23.         }
  24. }
  25.  
  26. void
  27. parent(int wfd, int rfd)
  28. {
  29.         for (;;) {
  30.                 int i, n;
  31.  
  32.                 n = read(rfd, &i, sizeof i);
  33.                 if (n != sizeof i) {
  34.                         fprintf(stderr, "read\n");
  35.                 }
  36.  
  37.                 n = write(wfd, &i, sizeof i);
  38.                 if (n != sizeof i) {
  39.                         fprintf(stderr, "write\n");
  40.                 }
  41.  
  42.                 if ((i % (NUM / 1000)) == 0) {
  43.                         fprintf(stderr, "%d\n", i);
  44.                 }
  45.                 if (i == NUM) {
  46.                         fprintf(stderr, "done\n");
  47.                         break;
  48.                 }
  49.         }
  50. }
  51. int
  52. main(int ac, char *av[])
  53. {
  54.         int fds_a[2], fds_b[2];
  55.  
  56.         if (pipe(fds_a) < 0) {
  57.                 fprintf(stderr, "pipe\n");
  58.                 return EXIT_FAILURE;
  59.         }
  60.         if (pipe(fds_b) < 0) {
  61.                 fprintf(stderr, "pipe\n");
  62.                 return EXIT_FAILURE;
  63.         }
  64.  
  65.         pid_t pid = fork();
  66.         if (pid < 0) {
  67.                 fprintf(stderr, "pipe\n");
  68.                 return EXIT_FAILURE;
  69.         }
  70.  
  71.         if (pid == 0) {
  72.                 close(fds_a[0]);
  73.                 close(fds_b[1]);
  74.                 child(fds_a[1], fds_b[0]);
  75.         } else {
  76.                 close(fds_a[1]);
  77.                 close(fds_b[0]);
  78.                 parent(fds_b[1], fds_a[0]);
  79.         }
  80.  
  81.         return EXIT_SUCCESS;
  82. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement