Advertisement
Anton0093

Lab_4_3

Nov 7th, 2020
1,985
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.76 KB | None | 0 0
  1.  
  2. #include "stdio.h"
  3. #include "stdlib.h"
  4. #include <fcntl.h>
  5. #include <unistd.h>
  6.  
  7. int main(int argc, char **argv) {
  8.    
  9.    
  10.     int fd1[2], fd2[2], result;
  11.     char Hello[] = "Приветик";
  12.     char resstring1[50], resstring2[50];
  13.    
  14.     if (pipe(fd1) < 0) {
  15.         printf("Pipe 1 не создался!");
  16.     }
  17.    
  18.     if (pipe(fd2) < 0) {
  19.         printf("Pipe 2 не создался!");
  20.     }
  21.    
  22.     result = fork();
  23.    
  24.     if (result == -1) {
  25.  
  26.         printf("Процесс-ребенок не был создан!");
  27.     }
  28.    
  29.     else if (result > 0) {
  30.  
  31.         close(fd1[0]); //закрываем выходной поток pipe1
  32.         close(fd2[1]); //закрываем входной поток pipe2
  33.        
  34.         write(fd1[1], Hello, 50); //записываем в входной поток pipe1 приветствие
  35.        
  36.         printf("Написал родитель pipe1: ");
  37.         puts(Hello); //выводим на экран
  38.        
  39.         close(fd1[1]); //закрываем входной поток pipe1
  40.        
  41.         puts("Процесс-родитель вышел!\n");
  42.        
  43.     } else {
  44.        
  45.         close(fd1[1]);//закрываем входной поток pipe1
  46.         close(fd2[0]); //закрываем выходной поток pipe2
  47.        
  48.         printf("Ребенок читает строку pipe1-родителя: ");
  49.        
  50.         read(fd1[0], resstring1, 50); //записываем приветствие в выходной поток pipe1
  51.         puts(resstring1); //выводим на экран
  52.        
  53.         close(fd1[0]); //закрываем выходной поток pipe1
  54.        
  55.         printf("Ребенок записывает строку в pipe2: ");
  56.         puts(resstring1); //выводим на экран
  57.        
  58.         write(fd2[1], Hello, 50); //записываем в входной поток pipe2 приветствие
  59.        
  60.         close(fd2[1]); //закрываем входной поток pipe2
  61.        
  62.         printf("Процесс-ребенок вышел!\n");
  63.        
  64.     }
  65.    
  66.     sleep(0); //приостанавливаем работу потока
  67.    
  68.     if (result > 0) {
  69.         close(fd2[1]); //закрываем входной поток pipe2
  70.        
  71.         printf("Родитель читает строку:\n ");
  72.        
  73.         read(fd2[0], resstring2, 50); //записываем приветствие в выходной поток pipe2
  74.         puts(resstring2); //выводим на экран
  75.        
  76.         close(fd2[0]); //закрываем выходной поток pipe2
  77.        
  78.         printf("Родитель выходит\n");
  79.     }
  80.     return 0;
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement