SHARE
TWEET

Untitled

a guest Dec 16th, 2018 49 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <zconf.h>
  2. #include <stdlib.h>
  3. #include <stdio.h>
  4. #include <memory.h>
  5. #include <sys/wait.h>
  6. #include <ctype.h>
  7.  
  8. int main(int argc, char *argv[]) {
  9.     enum { BUF_SIZE = 16 };
  10.     int fd0[2];
  11.     pipe(fd0);
  12.     pid_t  p1 = fork();
  13.     if (p1 < 0) {
  14.         return 1;
  15.     } else if (p1 == 0) {
  16.         int fd1[2];
  17.         pipe(fd1);
  18.         pid_t p2 = fork();
  19.         if (p2 <  0) {
  20.             return 1;
  21.         } else if (p2 == 0) {
  22.             close(fd0[0]);
  23.             close(fd1[1]);
  24.             if (dup2(fd1[0], 0) < 0) {
  25.  
  26.                 return 1;
  27.             }
  28.  
  29.             if (dup2(fd0[1], 1) < 0) {
  30.                 return 1;
  31.             }
  32.  
  33.             close(fd1[0]);
  34.             close(fd0[1]);
  35.             execlp(argv[3], argv[3], NULL);
  36.             return 1;
  37.         } else {
  38.             int count = atoi(argv[1]);
  39.             int mod = atoi(argv[2]);
  40.             for (int i = 1; i <= count; i++) {
  41.                 dprintf(fd1[1], "%llu\n", (unsigned long long) (i * i) % mod);
  42.             }
  43.             close((fd1[1]));
  44.             wait(NULL);
  45.             return 0;
  46.         }
  47.     } else {
  48.         close(fd0[1]);
  49.  
  50.     }
  51.  
  52.     pid_t  p3 = fork();
  53.     if (p3 < 0) {
  54.         return 1;
  55.     } else if (p3 == 0) {
  56.         pid_t p4 = fork();
  57.         if (p4 <  0) {
  58.             return 1;
  59.         } else if (p4 == 0) {
  60.             close(fd0[1]);
  61.             dup2(fd0[0], 0);
  62.             close(fd0[0]);
  63.             char buf[BUF_SIZE] = {0};
  64.             while (fgets(buf, BUF_SIZE, stdin) != NULL) {
  65.                 for (int i = 0; i < BUF_SIZE && buf[i] != '\0'; i++) {
  66.                     if (buf[i] == ' ') {
  67.                         buf[i] = '\n';
  68.                     }
  69.                 }
  70.                 printf("%s", buf);
  71.                 fflush(stdout);
  72.             }
  73.             exit(0);
  74.         } else {
  75.             close(fd0[0]);
  76.             close(fd0[1]);
  77.             wait(NULL);
  78.         }
  79.     } else {
  80.         close(fd0[0]);
  81.         wait(NULL);
  82.         wait(NULL);
  83.         printf("0\n");
  84.     }
  85.  
  86.     return 0;
  87. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top