A voir également:
- Programmation shell en c
- Classic shell windows 11 - Télécharger - Personnalisation
- Application de programmation - Guide
- Programmation - Guide
- Top44rbn programmation - Forum Programmation
3 réponses
Bonjour,
Je n'ai peut-être pas compris ton problème... mais pour moi, il suffit de récupèrer la commande saisie, et de l'exécuter via 'system'.
Si tu saisis " echo pwet > test ", alors tu va appeler system("echo pwet > test")
Je ne comprend pas ce qui est différent, avec ou sans redirection, ou avec ou sans pipes, ou séparateurs....
Mais peut-être vas-tu m'expliquer celà :)
Bonne journée!
Je n'ai peut-être pas compris ton problème... mais pour moi, il suffit de récupèrer la commande saisie, et de l'exécuter via 'system'.
Si tu saisis " echo pwet > test ", alors tu va appeler system("echo pwet > test")
Je ne comprend pas ce qui est différent, avec ou sans redirection, ou avec ou sans pipes, ou séparateurs....
Mais peut-être vas-tu m'expliquer celà :)
Bonne journée!
bonjour marc
j pense k pour que se sera plus simple :
PARTIE 1 (k j'ai deja realiser)
Description Vous devez programmer un mini interpreteur de commande UN*X.
Cet interpreteur doit afficher un prompt (un simple "$> " par exemple) et attendre que vous tappiez une ligne de commande, validee par un retour a la ligne.
Le prompt n'est de nouveau affiche qu'apres la fin de l'execution de la commande.
Les lignes de commandes sont simples, pas de pipes, pas de redirections ou autres fonctions avancés.
Par exemple :
$> pwd
/dev
$> ls -l
total 0
crw-rw---- 1 root video 10, 175 dec 19 09:50 agpgart
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrom -> hdc
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrom0 -> hdc
drwxr-xr-x 2 root root 60 dec 19 09:50 cdroms/
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrw -> hdc
lrwxrwxrwx 1 root root 11 dec 19 09:50 core -> /proc/kcore
drwxr-xr-x 3 root root 60 dec 19 09:50 cpu/
drwxr-xr-x 3 root root 60 dec 19 09:50 discs/
lrwxrwxrwx 1 root root 3 dec 19 09:50 disk -> hda
lrwxrwxrwx 1 root root 3 dec 19 09:50 dvd -> hdc
lrwxrwxrwx 1 root root 3 dec 19 09:50 dvdrw -> hdc
crw------- 1 root root 29, 0 dec 19 09:50 fb0
lrwxrwxrwx 1 root root 13 dec 19 09:50 fd -> /proc/self/fd/
brw-rw---- 1 root floppy 2, 0 dec 19 09:50 fd0
brw-rw---- 1 root floppy 2, 1 dec 19 09:50 fd1
crw-rw-rw- 1 root root 1, 7 dec 19 09:50 full
brw-rw---- 1 root root 3, 0 dec 19 09:50 hda
brw-rw---- 1 root root 3, 1 dec 19 09:50 hda1
brw-rw---- 1 root root 3, 2 dec 19 09:50 hda2
brw-rw---- 1 root root 3, 3 dec 19 09:50 hda3
brw-rw---- 1 root root 3, 5 dec 19 09:50 hda5
brw-rw---- 1 root root 3, 6 dec 19 09:50 hda6
$> toto
toto: command not found
$>
Les executables sont ceux que l'on peut trouver dans les chemins indiqué dans la variable PATH. Dans le cas ou celui ci ne peut etre trouvé, il faut afficher un message d'erreur et reafficher le prompt.
# Vous devez gerer les erreurs sans utiliser errno, en affichant un message adapte sur la sortie d'erreur.
# Vous devez gerer correctement le PATH et l'environnement (copie du char **environ systeme).
# De plus vous devez implementer une serie de builtins : cd, setenv, unsetenv, env, exit.
Fonctions authorisées malloc, free, opendir, readdir, closedir, exit
Appels système authorisés chdir, fork, stat, lstat, fstat, open, read, write, execve, access, wait, waitpid, wait3, wait4, signal, kill
PARTIE 2 :(voici mon probleme)
Il s'agit de reprendre votre minishell1, et d'y integrer les ';',
les pipe '|' et les 4 redirections '>', '<', '>>' et '<<'.
Vous devez utiliser execve(2) (et non execvp) comme pour le minishell1.
prompt>ls | more >> /tmp/toto ; cd /tmp ; cat < toto
[...]
Foctions interdites: -popen(3), pclose(3)
Les aggregations de filedescriptors (genre sortie d'erreur) sont en bonus.
(Vous savez, cat toto >& /tmp/titi en tcsh ou bien cat toto > /tmp/titi 2>&1 en sh)
EN FAIT ON DOIT RECODER UN SHELL A L'AIDE DE NOS PROPRES FONCTION ET NOS PROPRES PROGRAMME
DONC TOUT EST A REFAIRE ET TOUT EST A GERER.
POUR L'EXECUTION DES COMMANDES DU SYSTEME COMME LS PAR EXEMPLE JE ME SUIS AIDER DE L'APPEL A EXECVE
EN TOUT CAS LA PREMIERE PARTI MARCHE
ET JE VOUDRAI SAVOIR COMMENT FAIRE POUR GERER LES SEPARATEURS LES REDIRECTION ET LES PIPES
MERCI ENCORE EN ESPERANT K TU CONMPRENNE MES EXPLICATIONS
j pense k pour que se sera plus simple :
PARTIE 1 (k j'ai deja realiser)
Description Vous devez programmer un mini interpreteur de commande UN*X.
Cet interpreteur doit afficher un prompt (un simple "$> " par exemple) et attendre que vous tappiez une ligne de commande, validee par un retour a la ligne.
Le prompt n'est de nouveau affiche qu'apres la fin de l'execution de la commande.
Les lignes de commandes sont simples, pas de pipes, pas de redirections ou autres fonctions avancés.
Par exemple :
$> pwd
/dev
$> ls -l
total 0
crw-rw---- 1 root video 10, 175 dec 19 09:50 agpgart
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrom -> hdc
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrom0 -> hdc
drwxr-xr-x 2 root root 60 dec 19 09:50 cdroms/
lrwxrwxrwx 1 root root 3 dec 19 09:50 cdrw -> hdc
lrwxrwxrwx 1 root root 11 dec 19 09:50 core -> /proc/kcore
drwxr-xr-x 3 root root 60 dec 19 09:50 cpu/
drwxr-xr-x 3 root root 60 dec 19 09:50 discs/
lrwxrwxrwx 1 root root 3 dec 19 09:50 disk -> hda
lrwxrwxrwx 1 root root 3 dec 19 09:50 dvd -> hdc
lrwxrwxrwx 1 root root 3 dec 19 09:50 dvdrw -> hdc
crw------- 1 root root 29, 0 dec 19 09:50 fb0
lrwxrwxrwx 1 root root 13 dec 19 09:50 fd -> /proc/self/fd/
brw-rw---- 1 root floppy 2, 0 dec 19 09:50 fd0
brw-rw---- 1 root floppy 2, 1 dec 19 09:50 fd1
crw-rw-rw- 1 root root 1, 7 dec 19 09:50 full
brw-rw---- 1 root root 3, 0 dec 19 09:50 hda
brw-rw---- 1 root root 3, 1 dec 19 09:50 hda1
brw-rw---- 1 root root 3, 2 dec 19 09:50 hda2
brw-rw---- 1 root root 3, 3 dec 19 09:50 hda3
brw-rw---- 1 root root 3, 5 dec 19 09:50 hda5
brw-rw---- 1 root root 3, 6 dec 19 09:50 hda6
$> toto
toto: command not found
$>
Les executables sont ceux que l'on peut trouver dans les chemins indiqué dans la variable PATH. Dans le cas ou celui ci ne peut etre trouvé, il faut afficher un message d'erreur et reafficher le prompt.
# Vous devez gerer les erreurs sans utiliser errno, en affichant un message adapte sur la sortie d'erreur.
# Vous devez gerer correctement le PATH et l'environnement (copie du char **environ systeme).
# De plus vous devez implementer une serie de builtins : cd, setenv, unsetenv, env, exit.
Fonctions authorisées malloc, free, opendir, readdir, closedir, exit
Appels système authorisés chdir, fork, stat, lstat, fstat, open, read, write, execve, access, wait, waitpid, wait3, wait4, signal, kill
PARTIE 2 :(voici mon probleme)
Il s'agit de reprendre votre minishell1, et d'y integrer les ';',
les pipe '|' et les 4 redirections '>', '<', '>>' et '<<'.
Vous devez utiliser execve(2) (et non execvp) comme pour le minishell1.
prompt>ls | more >> /tmp/toto ; cd /tmp ; cat < toto
[...]
Foctions interdites: -popen(3), pclose(3)
Les aggregations de filedescriptors (genre sortie d'erreur) sont en bonus.
(Vous savez, cat toto >& /tmp/titi en tcsh ou bien cat toto > /tmp/titi 2>&1 en sh)
EN FAIT ON DOIT RECODER UN SHELL A L'AIDE DE NOS PROPRES FONCTION ET NOS PROPRES PROGRAMME
DONC TOUT EST A REFAIRE ET TOUT EST A GERER.
POUR L'EXECUTION DES COMMANDES DU SYSTEME COMME LS PAR EXEMPLE JE ME SUIS AIDER DE L'APPEL A EXECVE
EN TOUT CAS LA PREMIERE PARTI MARCHE
ET JE VOUDRAI SAVOIR COMMENT FAIRE POUR GERER LES SEPARATEURS LES REDIRECTION ET LES PIPES
MERCI ENCORE EN ESPERANT K TU CONMPRENNE MES EXPLICATIONS