Exécuter les commandes d'un fichier

Résolu
Alongra Messages postés 16 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 26 février 2007 - 7 janv. 2007 à 22:43
Alongra Messages postés 16 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 26 février 2007 - 8 janv. 2007 à 11:24
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

yann_lo_san Messages postés 1137 Date d'inscription lundi 17 novembre 2003 Statut Membre Dernière intervention 23 janvier 2016 26
7 janv. 2007 à 23:00
Salut,

execvp() ne prend il pas les parametres des commandes dans un tab de commandes ?
Alongra Messages postés 16 Date d'inscription dimanche 28 septembre 2003 Statut Membre Dernière intervention 26 février 2007
8 janv. 2007 à 11:24
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).
Rejoignez-nous