Pourquoi cout empêche-t-il le code ultérieur de s’exécuter ici?

Je travaille sur un shell rudimentaire, mais dans la boucle ci-dessous, le programme ne dépasse pas la ligne marquée (il est immédiatement bouclé). Lorsque je commente, le bloc entier se termine avant de se remettre en boucle. Que se passe t-il ici?

#include  #include  #include  using namespace std; int main(int argc, char *argv[]) { ssortingng input; const char *EOF="exit"; ssortingng prompt=getenv("USER"); prompt.append("@ash>"); while(true) { int parent=fork(); if ( !parent ) { cout << prompt; //The program never gets past this point getline(cin,input); if (!input.compare(EOF)) exit(0); cout << input << '\n'; execlp("ls", "-l", NULL); return 0; } else wait(); } } 

Ajoutez ces #include s:

 #include  #include  

puis invoquez correctement wait(2) :

 int status; wait(&status); 

Votre code, wait() , n’invoque pas l’appel système wait(2) . Au lieu de cela, il déclare un object temporaire de type union wait . Si vous stdlib.h mais pas sys/wait.h , vous n’obtenez que la déclaration de type, pas la déclaration de fonction.

En passant, si vous aviez vérifié la valeur de retour de l’appel wait : int result = wait() , vous auriez reçu un message d’erreur informatif:

xsh.cc:26: erreur: impossible de convertir ‘wait’ en ‘int’ lors de l’initialisation