Después de mucho luchar hemos encontrado el arreglo de este rompecabezas que agunos lectores de este espacio presentan. Si quieres compartir algún dato no dejes de compartir tu conocimiento.
Solución:
Por que usar freopen()
? La especificación C89 tiene la respuesta en una de las notas finales de la sección sobre
:
116. El uso principal de la
freopen
función es cambiar el archivo asociado con un flujo de texto estándar (stderr
,
stdin
ostdout
), ya que esos identificadores no necesitan ser lvalues modificables a los que el valor devuelto por elfopen
se le puede asignar una función.
freopen
es comúnmente mal utilizado, por ejemplo stdin = freopen("newin", "r", stdin);
. Esto no es más portátil que fclose(stdin); stdin = fopen("newin", "r");
. Ambas expresiones intentan asignar a stdin
que no se garantiza que sea asignable.
La forma correcta de usar freopen
es omitir la asignación: freopen("newin", "r", stdin);
Creo que estás buscando algo como freopen()
Esta es una versión modificada del método de Tim Post; Usé /dev/tty en lugar de /dev/stdout. No sé por qué no funciona con stdout (que es un enlace a /proc/self/fd/1):
freopen("log.txt","w",stdout);
...
...
freopen("/dev/tty","w",stdout);
Al usar /dev/tty, la salida se redirige a la terminal desde donde se inició la aplicación.
Espero que esta información sea útil.
Si estás contento con lo expuesto, eres capaz de dejar una crónica acerca de qué te ha impresionado de esta reseña.