Advertisement
Guest User

Untitled

a guest
Jan 24th, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.28 KB | None | 0 0
  1. #include <unistd.h>
  2. #include <string.h>
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5. #include <fcntl.h>
  6. #include <sys/types.h>
  7. #include <sys/stat.h>
  8.  
  9. #define MAX_CMD_LENGTH 100
  10.  
  11. #define MAX_NUM_PARAMS 10
  12.  
  13.  
  14. int main (int argc, char *argv[]) {
  15.     // Decoupage des commandes avec --
  16.     /*
  17.     char * argv1[MAX_NUM_PARAMS+1] = {0};
  18.     char * argv2[MAX_NUM_PARAMS+1] = {0};
  19.     int cmd[10] = {0};
  20.     int k, y, x;
  21.     int f = 1;
  22.     int nbCommande = 1;
  23.  
  24.     int i = 0;
  25.     char *commands[10] = {0};
  26.     int last=1;
  27.  
  28.     for (k=1; k < argc-1; k++) {
  29.     if (strcmp(argv[k], "--") == 0) {
  30.         nbCommande++;
  31.         cmd[i] = k;
  32.         printf("Pipe found i=%d k=%d\n", i, k);
  33.  
  34.  
  35.         int a;
  36.         commands[i]="";
  37.         char coms[50];
  38.         char t[50];
  39.         strcat(coms, strcat(t, argv[k]));
  40.         for (a=last;a<k;a++) {
  41.         char *t = argv[a];
  42.         printf("coms=%s\n", coms);
  43.         printf("t = %s\n", t);
  44.         strcat(coms,t);
  45.         //commands[i] = argv[a];
  46.         //commands[i] = argv[a];
  47.         }
  48.  
  49.         commands[i] = coms;
  50.  
  51.         printf("Commande : %s\n", commands[i]);
  52.  
  53.         last = k;
  54.         i++;       
  55.         if (f==1) {
  56.         f = 0; y = k;
  57.         }
  58.     }
  59.     }
  60.     */
  61.  
  62.     // fin premier decoupage
  63.     /*
  64.     int nbPipeline = 0;
  65.     int i, j;
  66.     for(i = 1; i < argc; i++) {
  67.     if(!strcmp(argv[i], "--")) {
  68.         nbPipeline++;
  69.     }
  70.     }
  71.  
  72.     printf("Nombre pipeline : %d\n", nbPipeline);
  73.  
  74.     //délimitation des commandes avec leur paramètre
  75.     // i = chaine de début
  76.     // i+1 = fin des paramètre/commande à exécuter (équivaut soit au double tiret, soit à la taille totale)
  77.     int *posDelimitator = malloc((nbPipeline+1)*2 * sizeof(int));
  78.     int cpt=0;
  79.     posDelimitator[cpt] = 1;
  80.     cpt++;
  81.     for(i = 1; i < argc; i++) {
  82.     if(!strcmp(argv[i], "--")) {
  83.         posDelimitator[cpt]=i;
  84.         cpt++;
  85.         posDelimitator[cpt]=i+1;
  86.         cpt++;
  87.     }
  88.     }
  89.     posDelimitator[cpt] = argc;
  90.     */
  91.  
  92.     int i = 1;
  93.     for( i=1; i<argc-1; i++)
  94.     {
  95.     if (!strcmp(argv[i], "--")) {
  96.         continue;
  97.     }
  98.     int j = 1;
  99.     int nb = 0;
  100.     for (j = i; j < argc; j++) {
  101.         if(!strcmp(argv[j], "--")) {
  102.         break;
  103.         }
  104.         nb++;
  105.     }
  106.     printf("\n nb argument %d\n", nb);
  107.    
  108.     char **args = (char **)malloc((nb+2) * sizeof(char));
  109.     args[0] = argv[i];
  110.     j = 1;
  111.     for (j = 1; j < nb; j++) {
  112.         printf("AAARRRG %d\n", j);
  113.         args[j] = argv[i+j];
  114.     }
  115.  
  116.     printf("cmd Executer la commande : %s\n", argv[i]);
  117.     printf("cmd Argument[0] : %s\n", args[1]);
  118.     int pd[2];
  119.     pipe(pd);
  120.  
  121.     if (!fork()) {
  122.         dup2(pd[1], 1); // remap output back to parent
  123.         execvp(argv[i], args);
  124.         perror("exec");
  125.         abort();
  126.     }
  127.  
  128.     // remap output from previous child to input
  129.     dup2(pd[0], 0);
  130.     close(pd[1]);
  131.     i += nb;
  132.     }
  133.  
  134.    
  135.    
  136.     int j = 1;
  137.     int nb = 0;
  138.     for (j = i; j < argc; j++) {
  139.     if (!strcmp(argv[j], "--")) {
  140.         break;
  141.     }
  142.     nb++;
  143.     }
  144.  
  145.     printf("\n nb argument %d\n", nb);
  146.    
  147.     char **args = (char **)malloc((nb+2) * sizeof(char));
  148.     args[0] = argv[i];
  149.     j = 1;
  150.     for (j = 1; j < nb; j++) {
  151.     printf("AAARRRG %d\n", j);
  152.     args[j] = argv[i+j];
  153.     }
  154.     args[j] = NULL;
  155.    
  156.     //char *args[] = {argv[i], NULL };
  157.     printf("Executer la commande : %s\n", argv[i]);
  158.     //printf("cmd Argument[0] : %s\n", args[0]);
  159.     execvp(argv[i], args);
  160.     perror("exec");
  161.     return 0;
  162. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement