execvp - ls: fts_open: Keine solche Datei oder kein solches Verzeichnis

Ich kämpfe derzeit mit diesem Fehler. Ich schreibe einen Shell-Emulator und verwende fork (), um einen Befehl mit execvp () auszuführen. Fast jeder Befehl, den ich versuche, in meine Shell zu analysieren, funktioniert einwandfrei, mit Ausnahme von ls ohne Argumente. Wenn ich versuche, ls -lah auszuführen, funktioniert alles, aber ein einfaches ls wird nicht funktionieren und die folgende Fehlermeldung erhalten:

ls: fts_open: No such file or directory

Hier ist ein Ausschnitt aus meinem Code: (nur das Wesentliche)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        printf("%d\n", strlen(args[1]));
        args[2] = NULL;
        execvp(args[0], args);
      }
      else wait(NULL);
      puts("BACK TO PARENT");
    }

und hier ist die Ausgabe für ls:

ls
CHILD
ls

0
ls: fts_open: No such file or directory
BACK TO PARENT

Wie Sie sehen können, enthält args [0] ls, args [1] ist leer, da es keine Argumente gibt, die Länge von args [1] ist 0, aber ich erhalte weiterhin den Fehler.

Irgendeine Idee woran es liegen könnte?

BEARBEITEN:

Ein dickes Lob an Jonathan Leffler, dass er es herausgefunden hat:

Der Punkt ist, dass args [1] nicht wirklich leer ist, also versucht das Betriebssystem, die '' Datei zu öffnen, die offensichtlich nicht existiert und nach dem, was aussieht, nicht erstellt werden kann, da es nicht existiert Wirklich ein Name.

Also, hier ist, was ich getan habe: Überprüfen Sie die Länge der Argumente [1]. Wenn es 0 ist, setzen Sie es auf NULL. (Nur den Speicher freizugeben hat nicht wirklich geholfen)

pid = fork();
      if (pid==0)
      {
        puts("CHILD");
        puts(args[0]);
        puts(args[1]);
        if (strlen(args[1]) == 0)
            args[1] = 0;
        args[2] = NULL;
        execvp(args[0], args);
      }
      else wait(NULL);
      puts("BACK TO PARENT");
    }

Antworten auf die Frage(1)

Ihre Antwort auf die Frage