Saltar al contenido

Redireccionamiento de stdin y stdout desde C

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,
stdino stdout), ya que esos identificadores no necesitan ser lvalues ​​modificables a los que el valor devuelto por el fopen 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 stdinque 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.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *