#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);
}
}
}
Ich mache eine einfache Shell, die Befehle ausführt, aber wenn ich den Befehl an der Eingabeaufforderung eingeben, bekomme ich Segmentierung Fehler. Dies ist die einfachste Version, die nur für ein Argument Befehle wie "ls"Segmentierungsfehler mit execvp in c-Shell
Willkommen bei Stack Overflow! Es klingt, als müssten Sie lernen, wie Sie einen Debugger verwenden, um durch Ihren Code zu gehen. Mit einem guten Debugger können Sie Ihr Programm Zeile für Zeile ausführen und sehen, wo es von dem, was Sie erwarten, abweicht. Dies ist ein essentielles Werkzeug, wenn Sie programmieren wollen. Weiterführende Literatur: [Wie kleine Programme zu debuggen] (http://ericlippert.com/2014/03/05/how-to-debug-small-prigrams/). –
Was hat dich dazu gebracht, maximal 1000 'char's einzulesen? – alk
Das 'pid = fork() == -1' tut nicht das, was Sie annehmen (Details siehe hier: http://en.cppreference.com/w/c/language/operator_precedence). – alk