Je rencontre un problème avec la fonction fork utilisée dans une fonction que j'utilise pour créer un terminal pour un projet d'école.Echec de la fourchette dans C
Cette fonction est appelée à gérer l'entrée utilisateur quand ils tapent dans une commande:
void handleExternalCommands(char ** arr)
{
pid_t pid;
pid = fork();
printf("pid is ", (long) pid);
if (pid == -1)
{
perror("fork");
exit(EXIT_FAILURE);
}
else if (pid == 0)
{
int status = execvp(arr[0], arr);
printf("im in the child process");
if (status == -1)
{
// error handle
}
}
wait();
}
Cependant, peu importe ce que je tape, je ne peux pas réellement faire à l'intérieur de l'instruction if. Si j'essaie de savoir ce qui se passe avec pid en utilisant:
printf(pid);
Je reçois une erreur de segmentation fault?
Merci pour votre aide à l'avance, tout le monde.
MISE À JOUR:
J'ai changé le code à ce qu'il est au-dessus. L'impression du pid ne se produit qu'une seule fois et il n'imprime rien: "pid is"
Si la fourche est défaillante, vous pouvez facilement déterminer pourquoi. 'if (pid == -1) perror (" fork ");' –
'printf (pid)' n'imprime pas 'pid', sauf si 'pid' est une chaîne sans caractères de formatage. Lisez la documentation de 'printf()'. – Peter
Si 'execvp()' fonctionne, 'printf()' n'est jamais exécuté. Vous ne verrez que le message de 'printf()' si (a) vous avez ajouté un saut de ligne à la fin et (b) le 'execvp()' a échoué. (OK: vous pourriez le voir même sans nouvelle ligne, mais le saut de ligne est une bonne idée.) Déplacez 'printf()' avant le 'execvp()' et (définitivement) ajoutez le retour à la ligne et vous devriez voir les informations . –