begin process at 2010 02 10 16:51:14
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Archive C/C++

 > 

Archives

 > 

Au secours

 > 

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


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

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

dimanche 12 février 2006 à 13:33:27 | Dév un mini-shell en utilisant seulement des processus Linux

Leila83

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!
dimanche 12 février 2006 à 14:10:55 | Re : Dév un mini-shell en utilisant seulement des processus Linux

theneoiceman


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
dimanche 12 février 2006 à 20:55:46 | Re : Dév un mini-shell en utilisant seulement des processus Linux

Leila83

Slt! J'te remercie pr ta proposition, ton bout d'code a l'air très utile. Néanmoins, l'énoncé du TP exige ke je fasse appel à la programmation Shell (rien à voir avec la programmation C), dc pa d'include ni de printf... Bonne prog!
lundi 13 février 2006 à 01:45:05 | Re : Dév un mini-shell en utilisant seulement des processus Linux

julienbj


Ouais, mais bon, meme pour la programmation shell il te faudra faire des includes.

Vive le C
Tchao
Savon
lundi 13 février 2006 à 03:28:05 | Re : Dév un mini-shell en utilisant seulement des processus Linux

G0ss3Yn

Salut,
voilà une ebauche de solution, peut-être qu'elle t'interressera même si j'imagine que tu as des cours si t'as un TP à faire dessus ^^

Vite fais :

while true
do
read ligne
if [ $ligne = sortie ]
then break
else echo "$ligne"
fi
done

Ensuite y'a un truc interressant comme par exemple:

ligne="commande arg1 arg2 arg3"
set $ligne
echo $# --> Renvoit le nombre de mot, ici 4
echo $1 --> Renvoit "commande"
echo $3 --> Renvoit "arg2"

Et enfin, pour éxécuter une commande :

cmd="date"
eval $date

Voilà, j'espère que ça pourra t'éclairer un peu...

G0ss3Yn... ( Bon coding a tous !)
lundi 13 février 2006 à 03:30:16 | Re : Dév un mini-shell en utilisant seulement des processus Linux

G0ss3Yn

arf...
à la fin c'est :
eval $cmd
et pas eval $date, bien sur ^^

G0ss3Yn... ( Bon coding a tous !)
mercredi 15 février 2006 à 22:43:51 | Re : Dév un mini-shell en utilisant seulement des processus Linux

Leila83

Slt! D'abord, merci pr vos interventions...ça m'touche ke vous venez en aide à une "développeuse" en détresse ;-) ...néanmoins, ya qqch ki pue :

Sachant ke j'utilise le bash, ya t-il une cmd ki permet de créer un processus? ou bien fo t-il forcément faire appel à la fct fork? si c le cas, je crois ke je donnerai raison à la proposition de "theneoiceman" et j'dois revoir la remarke de "julienbj"...bref, ça sent le C :-(

Bonne prog!

mercredi 15 février 2006 à 23:03:12 | Re : Dév un mini-shell en utilisant seulement des processus Linux

G0ss3Yn

Sachant que dans les règles de création de processus du shell tu as 3 alternatives :

1 - Le processus enfant prends la main ( ex: [Machin]$ mozilla<entrée> )
2 - Le processus enfant s'execute en arriere-plan ( ex: [Machin]$ mozilla &<entrée> )
3 - Le processus enfant dit 'émancipé' ( ex: [Machin]$ mozilla &!<entrée> )

En 1, c'est ce qu'on connait d'habituel...
En 2, le processus enfant est lancé et nous permet quand même d'interagir avec le processus parent (ton programme dans noter cas). Seulement, si tu ferme ton programme, tous les processus enfant qu'il aura lancé seront eux aussi fermé.
En 3, les processus enfants peuvent survivre à la mort du parent, c'est ce qu'il te faut à mon avis...

Voilà, cette méthode alliée à la commande "eval" devrait fonctionner... J'suis en vacances et j'ai pas de Linux sous la main pour tester donc tiens nous au courant ;)

G0ss3Yn... ( Bon coding a tous !)


Cette discussion est classée dans : shell, linux, cmd, mini, dév


Répondre à ce message

Sujets en rapport avec ce message

Shell via socket [ par Stormy ] J'explique le problème: j'ai un socket serveur en attente de connexion distante. Je veux lui passer des requêtes (stdin) qui concerne un shell sur cm shell sous linux [gcc] [ par badboy38 ] Bonsoir, j'aurais besoin de connaitre l'équivalent sous linux de ShellExecute pour mon projet (de cours que je dois rendre mercredi...). Quelle est l Creation d'un mini Shell [ par halima ] Bonjour! Je dois ecrire un programme en C (mini_shell) qui se comporte comme un Shell.Ce programme doit donner le repertoire courant (getcwd(3)) suivi récupération d'une chaine saisie sans l'afficher dans un shell sous linux ?? [ par Skysurfeur ] Bonjour à tous, je dois récupérer une chaine de caractères qui sera tapé par un utilisateur dans un shell sous linux, mais il ne faut pas que celle-ci controler le shell cmd.exe de machine distante ou il y a serveur [ par dyroj ] bonjour,je voudrai avoir linvite de commande du serveur que je créer a partir du client.netcat le fait avec loption -e.merci a++. La compilation sous windows [ par b4n92uid ] Bonjour tout le monde, je post ici en espérant avoir des réponse clair et satisfaisant voila, je voudrais compiler quelque bibliothèque (DevIL entre Mise à jour de paramètre [ par justine684 ] Bonjour! Alors j'ai un problème que je ne sais résoudre. Peu être que quelqu'un pourrait m'aider. Mon but est de référencer les semaines dans une anné synchronistaion ipod sous linux [ par Richard94 ] Bonjour, voila, j'essaye depuis un moment de synchroniser mon ipod sous linux, j'ai suivi le tuto ci contre www.geekeries.fr... mais quand je fais:" s Compiler un programme C++/ Linux sous windows [ par magicientarik ] Bonjour Qulequ'un peut m'aider svp, je suis vraiment dans la merde, mon programme est developpé en C++ sous linux et je veux le recompiler sous wind Portabilité [ par Arnauti ] Bonjour, j'ai réalisé un petit programme sur l'algorithme d'Euclide. Jusque là tout va bien. Cependant, j'ai un probleme de portabilité windows/linux


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,451 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales