Advertisement
HAR1F

Untitled

May 23rd, 2020
1,728
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.68 KB | None | 0 0
  1. #include <sys/types.h>
  2. #include <unistd.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. int main()
  7. {
  8.     int fds[2][2], result;
  9.     // fds[0] parent -> child
  10.     // fds[1] child -> parent
  11.  
  12.     size_t size;
  13.     char resstring[14];
  14.  
  15.     for (int i = 0; i < 2; ++i)
  16.     {
  17.         if (pipe(fds[i]) < 0)
  18.         {
  19.             printf("Can\'t open pipe\n");
  20.             exit(-1);
  21.         }
  22.     }
  23.  
  24.     result = fork();
  25.  
  26.     if (result < 0)
  27.     {
  28.         printf("Can\'t fork child\n");
  29.         exit(-1);
  30.     }
  31.     else if (result > 0)
  32.     {
  33.         /* Parent process */
  34.         close(fds[0][0]);
  35.         close(fds[1][1]);
  36.  
  37.         size = write(fds[0][1], "Hello, world!", 14);
  38.         if (size != 14)
  39.         {
  40.             printf("Parent: Can\'t write all string to pipe\n");
  41.             exit(-1);
  42.         }
  43.         size = read(fds[1][0], resstring, 14);
  44.         if (size < 0)
  45.         {
  46.             printf("Parent: Can\'t read string from pipe\n");
  47.             exit(-1);
  48.         }
  49.         printf("Parent: resstring:%s\n", resstring);
  50.     }
  51.     else
  52.     {
  53.         /* Child process */
  54.         close(fds[0][1]);
  55.         close(fds[1][0]);
  56.  
  57.         size = read(fds[0][0], resstring, 14);
  58.  
  59.         if (size < 0)
  60.         {
  61.             printf("Child: Can\'t read string from pipe\n");
  62.             exit(-1);
  63.         }
  64.         printf("Child: resstring:%s\n", resstring);
  65.         size = write(fds[1][1], resstring, 14);
  66.         if (size != 14)
  67.         {
  68.             printf("Child: Can\'t write all string to pipe\n");
  69.             exit(-1);
  70.         }
  71.     }
  72.  
  73.     for(int i = 0; i < 2; ++i){
  74.         close(fds[i][0]);
  75.         close(fds[i][1]);
  76.     }
  77.  
  78.     return 0;
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement