Estoy escribiendo una aplicación que actúa como un filtro: lee la entrada de un archivo (stdin), procesa y escribe la salida a otro archivo (stdout). El archivo de entrada se lee completamente antes de que la aplicación comience a escribir el archivo de salida.Usando el mismo archivo para stdin y stdout con redirección
Desde que estoy usando entrada y salida estándar, que se puede ejecutar es la siguiente:
$ ./myprog <file1.txt >file2.txt
Funciona bien, pero si trato de utilizar el mismo archivo como entrada y de salida (es decir: lee desde un archivo y escribir en el mismo archivo), así:
$ ./myprog <file.txt >file.txt
limpia file.txt
antes de que el programa tiene la oportunidad de leerlo.
¿Hay alguna manera de que pueda hacer algo como esto en una línea de comandos en Unix?
Extraño. ¿Por qué no funciona '$ (./myprog> file.txt)
TheoYou
Su ejemplo lo hace porque '> file.txt' trunca el contenido de file.txt y este es, de paso, el mismo archivo desde el que' file.txt' crea un * nuevo archivo * (inodo diferente en la misma ruta)) que está separado de lo que está leyendo '
antak
Así que todo lo que tenemos que hacer es ejecutar el subconjunto nosotros mismos. Creo que sé la respuesta, pero todavía no estoy seguro de por qué ... – TheoYou