Advertisement
BorrowTheProgrammer

lab5_os

Dec 12th, 2021
781
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.60 KB | None | 0 0
  1. #include <stdlib.h>
  2. #include <unistd.h>
  3. #include <sys/types.h>
  4. #include <sys/wait.h>
  5. #include <stdio.h>
  6. int main(int argc, char* argv[]) {
  7.         int fdp1[2];
  8.         int fdp2[2];
  9.         int fdp3[2];
  10.         int fdp4[2];
  11.         int fdp5[2];
  12.         pipe(fdp1);
  13.         pipe(fdp2);
  14.         pipe(fdp3);
  15.         pipe(fdp4);
  16.         pipe(fdp5);
  17.         if(argc < 2) {
  18.                 write(1, "Usage: popular file-name words-number\n", 38);
  19.                 exit(0);
  20.         }
  21.         if(fork() == 0) {  //  1
  22.                 close(1); dup(fdp1[1]); close(fdp1[1]); close(fdp1[0]);
  23.                 execl("/bin/cat", "cat", argv[1], (char*) 0);
  24.                 exit(1);
  25.         }
  26.         if(fork() == 0) {  //  2
  27.                 close(0); dup(fdp1[0]); close(fdp1[0]); close(fdp1[1]);
  28.                 close(1); dup(fdp2[1]); close(fdp2[1]);
  29.                 execl("/usr/bin/tr", "tr", "-cs", "A-Za-z", "\n", (char*) 0);
  30.                 exit(2);
  31.         }
  32.         if(fork() == 0) {  //  3
  33.                 close(0); dup(fdp2[0]); close(fdp2[0]); close(fdp2[1]);
  34.                 close(fdp1[0]); close(fdp1[1]);
  35.                 close(1); dup(fdp3[1]); close(fdp3[1]); close(fdp3[0]);
  36.                 execl("/usr/bin/tr", "tr", "A-Z", "a-z", (char*) 0);
  37.                 exit(3);
  38.         }
  39.         if(fork() == 0) {  //  4
  40.                 close(0); dup(fdp3[0]); close(fdp3[0]); close(fdp3[1]);
  41.                 close(fdp1[0]); close(fdp1[1]);
  42.                 close(fdp2[0]); close(fdp2[1]);
  43.                 close(1); dup(fdp4[1]); close(fdp4[1]);
  44.                 execl("/usr/bin/uniq", "uniq", "-i", (char*) 0);
  45.                 exit(4);
  46.         }
  47.         if(fork() == 0) {  //  5
  48.                 close(0); dup(fdp4[0]); close(fdp4[0]); close(fdp4[1]);
  49.                 close(fdp1[0]); close(fdp1[1]);
  50.                 close(fdp2[0]); close(fdp2[1]);
  51.                 close(fdp3[0]); close(fdp3[1]);
  52.                 execl("/usr/bin/sort", "sort", "-u", (char*) 0);
  53.                 exit(5);
  54.         }
  55.         if(fork() == 0) {
  56.           close(0); dup(fdp5[0]); close(fdp5[0]); close(fdp5[1]);
  57.           close(fdp1[0]); close(fdp1[1]);
  58.           close(fdp2[0]); close(fdp2[1]);
  59.           close(fdp3[0]); close(fdp3[1]);
  60.           close(fdp4[0]); close(fdp4[1]);
  61.           execl("/usr/bin/tail", "tail", "-l", argv[2], (char*) 0);
  62.           exit(6);
  63.         }
  64.         close(fdp1[0]); close(fdp1[1]);
  65.         close(fdp2[0]); close(fdp2[1]);
  66.         close(fdp3[0]); close(fdp3[1]);
  67.         close(fdp4[0]); close(fdp4[1]);
  68.         close(fdp5[0]); close(fdp5[1]);
  69.         while(wait(0) != (-1));
  70.         exit(0);
  71. }
  72.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement