Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <unistd.h>
- #include <string.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <fcntl.h>
- #include <sys/types.h>
- #include <sys/stat.h>
- #define MAX_CMD_LENGTH 100
- #define MAX_NUM_PARAMS 10
- int main (int argc, char *argv[]) {
- // Decoupage des commandes avec --
- /*
- char * argv1[MAX_NUM_PARAMS+1] = {0};
- char * argv2[MAX_NUM_PARAMS+1] = {0};
- int cmd[10] = {0};
- int k, y, x;
- int f = 1;
- int nbCommande = 1;
- int i = 0;
- char *commands[10] = {0};
- int last=1;
- for (k=1; k < argc-1; k++) {
- if (strcmp(argv[k], "--") == 0) {
- nbCommande++;
- cmd[i] = k;
- printf("Pipe found i=%d k=%d\n", i, k);
- int a;
- commands[i]="";
- char coms[50];
- char t[50];
- strcat(coms, strcat(t, argv[k]));
- for (a=last;a<k;a++) {
- char *t = argv[a];
- printf("coms=%s\n", coms);
- printf("t = %s\n", t);
- strcat(coms,t);
- //commands[i] = argv[a];
- //commands[i] = argv[a];
- }
- commands[i] = coms;
- printf("Commande : %s\n", commands[i]);
- last = k;
- i++;
- if (f==1) {
- f = 0; y = k;
- }
- }
- }
- */
- // fin premier decoupage
- /*
- int nbPipeline = 0;
- int i, j;
- for(i = 1; i < argc; i++) {
- if(!strcmp(argv[i], "--")) {
- nbPipeline++;
- }
- }
- printf("Nombre pipeline : %d\n", nbPipeline);
- //délimitation des commandes avec leur paramètre
- // i = chaine de début
- // i+1 = fin des paramètre/commande à exécuter (équivaut soit au double tiret, soit à la taille totale)
- int *posDelimitator = malloc((nbPipeline+1)*2 * sizeof(int));
- int cpt=0;
- posDelimitator[cpt] = 1;
- cpt++;
- for(i = 1; i < argc; i++) {
- if(!strcmp(argv[i], "--")) {
- posDelimitator[cpt]=i;
- cpt++;
- posDelimitator[cpt]=i+1;
- cpt++;
- }
- }
- posDelimitator[cpt] = argc;
- */
- int i = 1;
- for( i=1; i<argc-1; i++)
- {
- if (!strcmp(argv[i], "--")) {
- continue;
- }
- int j = 1;
- int nb = 0;
- for (j = i; j < argc; j++) {
- if(!strcmp(argv[j], "--")) {
- break;
- }
- nb++;
- }
- printf("\n nb argument %d\n", nb);
- char **args = (char **)malloc((nb+2) * sizeof(char));
- args[0] = argv[i];
- j = 1;
- for (j = 1; j < nb; j++) {
- printf("AAARRRG %d\n", j);
- args[j] = argv[i+j];
- }
- printf("cmd Executer la commande : %s\n", argv[i]);
- printf("cmd Argument[0] : %s\n", args[1]);
- int pd[2];
- pipe(pd);
- if (!fork()) {
- dup2(pd[1], 1); // remap output back to parent
- execvp(argv[i], args);
- perror("exec");
- abort();
- }
- // remap output from previous child to input
- dup2(pd[0], 0);
- close(pd[1]);
- i += nb;
- }
- int j = 1;
- int nb = 0;
- for (j = i; j < argc; j++) {
- if (!strcmp(argv[j], "--")) {
- break;
- }
- nb++;
- }
- printf("\n nb argument %d\n", nb);
- char **args = (char **)malloc((nb+2) * sizeof(char));
- args[0] = argv[i];
- j = 1;
- for (j = 1; j < nb; j++) {
- printf("AAARRRG %d\n", j);
- args[j] = argv[i+j];
- }
- args[j] = NULL;
- //char *args[] = {argv[i], NULL };
- printf("Executer la commande : %s\n", argv[i]);
- //printf("cmd Argument[0] : %s\n", args[0]);
- execvp(argv[i], args);
- perror("exec");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement