Ich schreibe eine Anwendung, die wie ein Filter funktioniert: Es liest die Eingabe aus einer Datei (stdin), verarbeitet und schreibt die Ausgabe in eine andere Datei (stdout). Die Eingabedatei wird vollständig gelesen, bevor die Anwendung mit dem Schreiben der Ausgabedatei beginnt.Verwenden der gleichen Datei für Stdin und Stdout mit Umleitung
Da ich stdin und stdout bin mit, kann ich laufen ist wie folgt:
$ ./myprog <file1.txt >file2.txt
Es funktioniert gut, aber wenn ich versuche, die gleiche Datei als Eingabe und Ausgabe zu verwenden (das heißt: Lesen von eine Datei und schreiben in die gleiche Datei), wie folgt aus:
$ ./myprog <file.txt >file.txt
es reinigt file.txt
, bevor das Programm die Möglichkeit, es zu lesen hat.
Gibt es eine Möglichkeit, wie ich etwas in einer Befehlszeile in Unix tun kann?
Seltsam. Warum funktioniert "$ (./myprog> file.txt)
TheoYou
Ihr Beispiel tut das, weil '> file.txt' den Inhalt von file.txt abschneidet und das ist zufällig die gleiche Datei, von der ' file.txt' eine * neue Datei * (unterschiedliche Inode im selben Pfad)) das ist getrennt von dem, was '
antak
Alles, was wir tun müssen, ist, die Sub-Shell selbst zu starten. Ich denke, ich weiß die Antwort, aber ich bin mir immer noch nicht sicher, warum ... – TheoYou