Advertisement
volkovich_maksim

test_shell_pipe.c

Dec 19th, 2016
345
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.67 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <wait.h>
  4. #include <string.h>
  5. #include <errno.h>
  6. #include <time.h>
  7. #include <string.h>
  8. #include <sys/wait.h>
  9. #include <sys/types.h>
  10. #include <sys/time.h>
  11. #include <ctype.h>
  12. #include <stdlib.h>
  13. #include <sys/resource.h>
  14.  
  15.  
  16. int main(int argc, char *argv[]){
  17.     int pid;
  18.     if ((pid = fork()) < 0) return 1;
  19.     else if (pid == 0){//son
  20.         execlp("gcc", "gcc", "-g", "-Wall", "-pedantic", "util.c", "shell_pipe.c", "-o", "shell_pipe", NULL);
  21.         printf("can't compile shell_pipe\n");
  22.         return 1;
  23.     //end son
  24.     }else{
  25.         int compile_status, pid_compile;
  26.         int pid1, pid2, pid3, pid4, pid5;
  27.         int fd[5][2];
  28.         int i;
  29.         time_t time1, time2;
  30.         for (i = 0; i < 5; i++){
  31.             pipe(fd[i]);
  32.         }
  33.         int status1, status2, status3, status4, status5;
  34.         while ((pid_compile = wait(&compile_status)) == -1){
  35.             if (errno != EINTR) return 1;
  36.         }
  37.         if (!WIFEXITED(compile_status)) return 1;
  38.         else if (!WEXITSTATUS(compile_status)){
  39.             printf("Compilation has been succeed\n");
  40.  
  41.             time1 = time(NULL);
  42.             if ((pid1 = fork()) < 0){
  43.                 perror("fork1 ");
  44.                 exit(1);
  45.             }else if (pid1 == 0){//SON 1
  46.                 char *str = "sleep 2 | sleep 1\n";
  47.                 int len = strlen(str);
  48.                 dup2(fd[0][0], 0);
  49.                 write(fd[0][1], str, len);
  50.                 for (i = 0; i < 5; i++){
  51.                     close(fd[i][1]);
  52.                     close(fd[i][0]);
  53.                 }
  54.                 execl("./shell_pipe", "./shell_pipe", NULL);
  55.                 printf("can't exec parallel test\n");
  56.                 return 1;
  57.             }else{
  58.                 while((pid1 = wait(&status1)) == -1){
  59.                     if (errno != EINTR) return 1;
  60.                 }
  61.                 if (!WIFEXITED(status1)) return 1;
  62.                 else{
  63.                     time2 = time(NULL);
  64.                     if (time2 - time1 == 2){
  65.                         printf("Parallel executing\n");
  66.                     }
  67.                 }
  68.                 /*time1 = time(NULL);
  69.                 if ((pid2 = fork()) < 0){
  70.                     perror("fork2 ");
  71.                     exit(1);
  72.                 }else if (pid2 == 0){//SON 2
  73.                     char *str = "sleep 3 | ls -a | cat |sort\n";
  74.                     int len = strlen(str);
  75.                     dup2(fd[1][0], 0);
  76.                     write(fd[1][1], str, len);
  77.                     for (i = 0; i < 5; i++){
  78.                         close(fd[i][1]);
  79.                         close(fd[i][0]);
  80.                     }
  81.                     execl("./shell_pipe", "./shell_pipe", NULL);
  82.                     printf("can't test when the pipe ends\n");
  83.                     return 1;
  84.                 }else{
  85.                     while((pid2 = wait(&status2)) == -1){
  86.                         if (errno != EINTR) return 1;
  87.                     }
  88.                     if (!WIFEXITED(status2)) return 1;
  89.                     else{
  90.                         time2 = time(NULL);
  91.                         if (time2 - time1 == 3){
  92.                             printf("Pipe has been completed after the last program\n");
  93.                         }
  94.                     }
  95.                 }*/                
  96.             }
  97.             for (i = 0; i < 5; i++){
  98.                 close(fd[i][1]);
  99.                 close(fd[i][0]);
  100.             }
  101.             return 0;
  102.         }else{
  103.             printf("Compillation hasn't been exited\n");
  104.             return WEXITSTATUS(compile_status);
  105.         }
  106.     }
  107.     return 1;
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement