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.
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