Advertisement
Guest User

Untitled

a guest
Jan 23rd, 2018
68
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.12 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <unistd.h>
  3. #include <sys/wait.h>
  4. #include <errno.h>
  5. #include <memory.h>
  6.  
  7. #define MAX_CMD_LENGTH 100
  8.  
  9. #define MAX_NUM_PARAMS 10
  10.  
  11. int execpipe(char **argv1, char **argv2) {
  12.     pid_t pid;
  13.     int fd[2];
  14.     char buffer[4096];
  15.  
  16.     printf("[PARENT] PID : %d \n", getpid());
  17.  
  18.     int err = pipe(fd);
  19.     if (err == -1) {
  20.         printf("Erreur lors de la création du pipe \n");
  21.         return -1;
  22.     }
  23.  
  24.     pid = fork();
  25.  
  26.     if (pid == 0) {
  27.         /*
  28.         char *arg = ".";
  29.         if (argv[3] != NULL) {
  30.             arg = argv[3];
  31.         }
  32.          */
  33.         printf("[FILS] commande: %s %s \n", argv1[0], argv1[1]);
  34.         dup2(fd[1], STDOUT_FILENO);
  35.         close(fd[0]);
  36.         close(fd[1]);
  37.         printf("test\n");
  38.         int err = execlp(argv1[0], argv1[0], argv1[1], (char *) 0);
  39.         if (err == -1) {
  40.             printf("Erreur execvp argv1[0] \n");
  41.             perror("");
  42.             return -1;
  43.         }
  44.         printf("[FILS] Commande réussis ! \n\n");
  45.         _exit(0);
  46.     }
  47.  
  48.     else if (pid > 0) {
  49.         dup2(fd[0], STDIN_FILENO);
  50.         close(fd[1]);
  51.         close(fd[0]);
  52.         int status;
  53.         wait(&status);
  54.         //int nbytes = read(fd[0], buffer, sizeof(buffer));
  55.         //printf("[PARENT] Output : (%.*s) \n", nbytes, buffer);
  56.         printf("Lancement de la 2eme commande pour le pipe %s %s\n", argv2[0], argv2[1]);
  57.         int err = execlp(argv2[0], argv2[0], argv2[1], (char *) 0);
  58.         if (err == -1) {
  59.             printf("Erreur execl argv2[0]\n");
  60.             perror("");
  61.             return -1;
  62.         }
  63.     }
  64.  
  65.     else {
  66.         printf("Error \n");
  67.     }
  68.  
  69.     return 1;
  70. }
  71.  
  72.  
  73. int main(int argc, char *argv[]) {
  74.     if (argc < 2) {
  75.         printf("Usage ./a.out commande1 commande2 \n");
  76.         return -1;
  77.     }
  78.  
  79.     printf("NB : %d\n", argc);
  80.  
  81.     char cmd[MAX_CMD_LENGTH+1];
  82.     char * params[MAX_NUM_PARAMS+1];
  83.     char * argv1[MAX_NUM_PARAMS+1] = {0};
  84.     char * argv2[MAX_NUM_PARAMS+1] = {0};
  85.     int k, y, x;
  86.     int f = 1;
  87.  
  88.     printf("Lancement du programme...\n");
  89.  
  90.     for (k=1; k < argc-1; k++) {
  91.         if (strcmp(argv[k], "--") == 0) {
  92.             f = 0; y = k;
  93.             printf("pipe found\n");
  94.             break;
  95.         }
  96.     }
  97.     if (f==0) {
  98.         for (x=0; x<k; x++) {
  99.             argv1[x]=argv[x+1];
  100.         }
  101.         int z = 0;
  102.         for (x=k+1; x<argc; x++) {
  103.             argv2[z] = argv[x];
  104.             z++;
  105.         }
  106.         return execpipe(argv1, argv2);
  107.     }
  108.  
  109.     return 1;
  110. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement