Dév un mini-shell en utilisant seulement des processus Linux

cs_Leila83 Messages postés 29 Date d'inscription samedi 12 mars 2005 Statut Membre Dernière intervention 14 janvier 2007 - 12 févr. 2006 à 13:33
G0ss3Yn Messages postés 65 Date d'inscription dimanche 12 janvier 2003 Statut Membre Dernière intervention 5 novembre 2010 - 15 févr. 2006 à 23:03
MES CORDIALES SALUTAIONS A TS LES DEV DE CPPFRANCE.COM ET EN PARTICULIER AUX ADMINS DU SITE...

Chui plantée avec un TP dont le thème est dév un mini-shell sous Linux capable d'exe n'importe kelle cmd Linux(ds un 1er temps, ce minishell ne prend pa en charge des cmd en background ou des cmd exécutées en parallèle).

D'après le prof, le minishell doit répondre à l'algo suivant:
répéter
lire(cmd)
analyser et traiter la cmd
executer la cmd
jusqu'à (cmd=sortir)

Sachant ke je dois dév ce TP avec des processus seulement:
- cmt lire une commande?
- cmt distinguer le mot-clé de la commande de ses arg(s'il y en a)?

Merci d'répondre et chui ouverte à n'importe kelle solution ;-)!

Bonne prog!

7 réponses

theneoiceman Messages postés 78 Date d'inscription lundi 14 avril 2003 Statut Membre Dernière intervention 23 avril 2010
12 févr. 2006 à 14:10
Pour recupérer les lignes de comande tapées par un utilisateur dans une console en C regarde du coté de la fonction :
char * fgets (char * s, int n, FILE * fic)
un exemple pour lire le contenu d'une ligne de commande tapée par un utilisateur :

#include <stdio.h>
// ...
char temp[256];
while(fgets(temp,256,stdin) != NULL)
printf(temp);

donc ca c'est pour recupérer la ligne de commande tapée par un utilisateur pendant que ton programme de shell est en exécution.

Ensuite, si tu veux recuperer chaque mot de la ligne de commande utilise la fonction strtok;
char * strtok(char* chaine, char * delimiteur);

Sachant que le delimiteur entre chaque mot de la ligne de commande est un espace voivi un exemple d'utilisation avec fgets et strtok en meme temps :
#include <stdio.h>
#include <string.h>
// ...
char temp[256];
char tmpstrtok[256];
int i=0;

while(fgets(temp,256,stdin) != NULL)

{
while(tmpstrtok=strtok(i==0?temp:NULL," ")) // delimiteur ==> espace
{
printf("%s\n",tmpstrtok);
i++;
}
}
Avec ca tu recuperes chaque mot de la ligne de commande.
Voilà


Mess with the best, die like the rest
0
Rejoignez-nous