Sto scrivendo un'applicazione che si comporta come un filtro: legge l'input da un file (stdin), elabora e scrive l'output in un altro file (stdout). Il file di input viene letto completamente prima che l'applicazione inizi a scrivere il file di output.Utilizzare lo stesso file per stdin e stdout con reindirizzamento
Dal momento che sto usando stdin e stdout, posso correre è come questo:
$ ./myprog <file1.txt >file2.txt
Funziona benissimo, ma se cerco di utilizzare lo stesso file come input e output (cioè: leggere da un file e di scrittura per lo stesso file), in questo modo:
$ ./myprog <file.txt >file.txt
pulisce file.txt
prima che il programma ha la possibilità di leggerlo.
C'è un modo per fare qualcosa di simile in una riga di comando in Unix?
Strano. Perché '$ (./myprog> file.txt)
TheoYou
L'esempio lo fa perché '> file.txt' tronca il contenuto di file.txt e questo è incidentalmente lo stesso file di cui' file.txt' crea un * nuovo file * (inode diverso sullo stesso percorso) che è separato da ciò che '
antak
Quindi tutto ciò che dobbiamo fare è di eseguire noi stessi il sub-shell. Penso di conoscere la risposta, ma non sono ancora sicuro del perché ... – TheoYou