#include <stdio.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
void main(){
char *cmd;
pid_t pid;
while (1) {
printf("$ ");
fgets(cmd,1000,stdin);
if (pid = fork() == -1) {
exit(1);
}
else if (pid == 0){
execvp(cmd,&cmd);
}
else{
int status;
wait(&status);
}
}
}
Je crée un shell simple qui exécute des commandes, mais lorsque j'entre la commande à l'invite, je continue d'obtenir une erreur de segmentation. Ceci est la plus simple version qui ne fonctionne que pour les commandes à un argument comme "ls"Erreur de segmentation à l'aide d'execvp dans le shell c
Bienvenue dans Stack Overflow! Il semble que vous deviez apprendre à utiliser un débogueur pour parcourir votre code. Avec un bon débogueur, vous pouvez exécuter votre programme ligne par ligne et voir où il dévie de ce que vous attendez. C'est un outil essentiel si vous voulez faire de la programmation. Pour en savoir plus: [Comment déboguer de petits programmes] (http://ericlippert.com/2014/03/05/how-to-debug-small-prgrams/). –
Qu'est-ce qui vous a décidé à lire avec un maximum de '1000'' char's? – alk
Ce 'pid = fork() == -1' ne fait pas ce que vous supposez faire (pour plus de détails, voir ici: http://en.cppreference.com/w/c/language/operator_precedence). – alk