Exécuter les commandes d'un fichier

Résolu
Signaler
Messages postés
16
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
26 février 2007
-
Messages postés
16
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
26 février 2007
-
Bonsoir/bonjour tout le monde !

J'espère que vous allez bien et que cette nouvelle année à bien commencé pour vous !!

Voilà, je dois réaliser un programme qui lit dans un fichier une suite de commande et dois les éxécuter, par exemple :
ls -l
free
touch toto

J'ai fait un tableau contenant les commandes à éxécuter, ensuite je les exécutes avec :
execlp (tableau[i], tableau [i], NULL)

Vous aurez bien compris que ça ne marche que quand on à des commandes du type "ls" ou "free", mais dés qu'il y a des options c'est mort. J'ai donc commencer à coder cela :

typedef struct
{
    char nomCommande[COMMAND_LIMIT];
    char option[50];
    char parametre[PARAMETER_LIMIT];
} Commande;
 
int main()
{
    FILE *fichier = NULL;
    Commande *cmd;
    int i=0;
   
    fichier = fopen("commande", "r");
    if (fichier == NULL)
        exit(1);

    while (feof(fichier) == 0)
    {
        fscanf(fichier, "%s%s%s", cmd[i].nomCommande, cmd[i].option, cmd[i].parametre);
        printf ("%s%s%s\n",cmd[i].nomCommande, cmd[i].option, cmd[i].parametre);
        i++;
    }   
    fclose(fichier);

}

Ma question est, est-il possible de tester ce que l'on récupère du fscanf ? Car si ce que l'on récupère commence par un '-' alors on le met dans cmd[i].option, et pouvoir gérer aussi les "colonnes" vides car par exemple, si on tombe sur un "ls" sans option et sans paramètre alors il prendra pour le cmd[i].option le  cmd[i+1].nomCommande...

Un grand merci à tout ceux qui répondront et très bonne semaine !!

2 réponses

Messages postés
1137
Date d'inscription
lundi 17 novembre 2003
Statut
Membre
Dernière intervention
23 janvier 2016
24
Salut,

execvp() ne prend il pas les parametres des commandes dans un tab de commandes ?
Messages postés
16
Date d'inscription
dimanche 28 septembre 2003
Statut
Membre
Dernière intervention
26 février 2007

Salut et merci d'avoir répondu !!

En effet, cette commande me parait mieux, toutefois, il réside un problème, car à l'heure actuelle mon tableau de commande est du style :
Tableau[0] = "ls"
Tableau[1] = "ls -l -a /dev"
...
Lors de la première itération sa passe, mais la seconde ça marche pas car il faut séparer les paramètres, je cherche une méthode facile pour le faire d'où mon code plus haut mais qui pose aussi des problèmes (exposé plus haut).