Advertisement
AlezM

Untitled

Oct 9th, 2017
185
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. //Вариант 20
  2. //Написать программу сравнения и вывода результата двух введенных по запросу файлов.
  3. //Информацию переслать через межпроцессный канал в параллельный процесс, где определить число
  4. //блоков, занимаемых каждым из введенных файлов. Предусмотреть возможность прерывания по сигналу
  5. //<CTRL>+<C>. Если поступило более 3-х сигналов прерывания, то создать новый каталог в текущем и
  6. //записать туда сравниваемые файлы.
  7.  
  8.  
  9. #include <sys/wait.h>
  10. #include <assert.h>
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include <unistd.h>
  14. #include <string.h>
  15.  
  16.  
  17. int main(int argc, char *argv[])
  18. {
  19.     int pfd[2];
  20.     pid_t cpid;
  21.     char buf;
  22.    
  23.     assert(argc == 2);
  24.  
  25.     if (pipe(pfd) == -1) { perror("pipe"); exit(EXIT_FAILURE); }
  26.  
  27.  
  28.     cpid = fork();
  29.     if (cpid == -1) { perror("fork"); exit(EXIT_FAILURE); }
  30.  
  31.  
  32.     if (cpid == 0) {    /* Child reads from pipe */
  33.         close(pfd[1]);          /* Close unused write end */
  34.  
  35.  
  36.         while (read(pfd[0], &buf, 1) > 0)
  37.             write(STDOUT_FILENO, &buf, 1);
  38.  
  39.  
  40.         write(STDOUT_FILENO, "\n", 1);
  41.         close(pfd[0]);
  42.         _exit(EXIT_SUCCESS);
  43.  
  44.  
  45.     }
  46.     else {            /* Parent writes argv[1] to pipe */
  47.         close(pfd[0]);          /* Close unused read end */
  48.         write(pfd[1], argv[1], strlen(argv[1]));
  49.         close(pfd[1]);          /* Reader will see EOF */
  50.         wait(NULL);             /* Wait for child */
  51.         exit(EXIT_SUCCESS);
  52.     }
  53. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement