Ich versuche, die ||
, &&
und ;
-Operatoren in einer Bash-Shell zu implementieren, die ich mache. Was ich versuche zu tun, ist ein int
als ein Flag, das auf 1 gesetzt würde, wenn es erfolgreich war oder 0, wenn es nicht war. Mein Problem ist, dass selbst wenn ich eine ungültige Operation eingeben wie ls -apples
es die Flagge auf 1 setzt erhalte ich die Fehlermeldung auchImplementieren von Bash-Operatoren für Shell in C++
ls: ungültige Option - ‚e‘ ‚ls --help‘ Try für weitere Informationen
also denke ich, dass es bedeutet technisch ausgeführt wird? Wie kann ich verfolgen, ob execvp
einen ungültigen Vorgang ausgeführt hat? Hier ist mein Code:
pid_t pid;
pid_t waitId;
int status;
//forks into two processes
pid = fork();
//There was an error during fork
if (pid < 0)
{
successFlag = 0;
perror("There was an error");
}
else if (pid == 0)
{
//must be cast because our function expects a char *const argv[]
if (execvp(command[0], (char**)command) < 0)
{
//error at execvp
successFlag = 0;
perror("There was an error executing the process");
}
exit(EXIT_FAILURE);
}
else
{
do
{
waitId = waitpid(pid, &status, WUNTRACED | WCONTINUED);
if(waitId == -1){
successFlag = 0;
perror("Error in parent process");
exit(EXIT_FAILURE);
}
}
while (!WIFEXITED(status) && !WIFSIGNALED(status));
}
//use this flag to determine whether the process was a success
successFlag = 1;
Sie haben Recht, der ls Befehl lief. Wenn ich Ihre Problembeschreibung richtig verstanden habe, möchten Sie feststellen, ob der Befehl einen Fehler gesendet hat. In diesem Fall möchten Sie den "Fehlercode" (Exit-Code), der vom Befehl zurückgegeben wird. –
Was ich gemacht habe, war der 'status' Wert von' waitpid'. Ich fand, dass jeder Wert, der nicht 0 war, ungültig war. Ich habe dafür eine boolesche Flagge erstellt. Ist das gültig? – ecain