Bonjour,
Il existe des balises de code pour que cela soit plus lisible:
Je n'ai pas tout compris de ce que tu fais mais en effet il y a un problème de
gestion des fork et des wait.
Le principe c'est:
Code :
- while (42)
- {
- /* Afficher le prompt et attendre une commande de l'utilisateur: */
- [...]
- /* traitement de la commande: */
- pid = fork()
- switch(pid)
- {
- case -1:
- //gérer l'erreur
- break;
- case 0:
- /* ici on est dans le processus fils. Dans le cas d'un shell, c'est ici
- qu'on va faire l'execution de la commande de l'utilisateur. */
- exit(0); /* À la fin il faut terminer le processus fils d'une façon ou
- d'une autre */
- default:
- /* ici c'est le processus père qui continue. Dans le cas d'un shell, on
- aura simplement un appel à wait pour qu'il attende la fin de son fils
- (sauf si on gère les processus en arrière plan mais c'est plus
- compliqué).*/
- break;
- }
- /* ici on est toujours dans le processus père puisque le fils est mort et a été
- attendu. on peut attendre une nouvelle commande.*/
- }
|
Pour ce qui est du changement de répertoire il ne faut pas faire cela dans un
processus fils. Si tu fork, tu crées 2 processus indépendants et le changement
de répertoire pour l'un n'a aucune action sur l'autre.
Plutôt que de faire des read bizarres sur stdin, tu peux utiliser la fonction
fgets:
Citation :
char *fgets(char *s, int size, FILE *stream); fgets() reads in at most one less than size characters from stream and stores them into the buffer pointed to by s. Reading stops after an EOF or a newline. If a newline is read, it is stored into the buffer. A terminating null byte ('\0') is stored after the last character in the buffer.
|
Message édité par ptitchep le 27-12-2013 à 18:14:01
---------------
deluser --remove-home ptitchep