Frage

Ich mache eine kleine Shell-Implementierung in C und stecke fest.

Ich möchte umleiten können stdin Und stdout, aber ich bin verwirrt.Wenn ich in meiner Shell ein Programm starten möchte, verwende ich das execvp Funktion.Jetzt möchte ich eine Weiterleitung ermöglichen stdout, Wenn ich also einen anderen Prozess ausführe, sollte die Ausgabe in eine Datei und nicht auf den Bildschirm umgeleitet werden.

Hier ist Beispielcode:

pid_t pid;

// Child process
pid = vfork();

if((pid == 0)){
    freopen("myfile.txt", "w", stdout);
    char* arr[3];
    arr[0] = "cat";
    arr[1] = "someFileToCat.txt";
    arr[2] = NULL;
   execvp("cat", arr);
   fclose(stdout);
}  

Es wird jedoch im Terminal und nicht in der Datei gedruckt.

War es hilfreich?

Lösung

Dateistreams sind ein C Abstraktion.Was Sie suchen, sind Systemaufrufe auf niedrigerer Ebene, z open, close, Und dup2.

Sehen Umleiten der Exec-Ausgabe in einen Puffer oder eine Datei für ein vollständiges Beispiel.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top