Estoy trabajando con un programa de hilos múltiples.C restaurar stdout al terminal
Primero redirijo mi stdout a un determinado archivo. No hay problema allí (utilicé dup2(fd, 1)
donde fd
es el descriptor de archivo para el archivo).
Después, necesito redirigir mi stdout a la terminal de nuevo.
Mi primer acercamiento:
/*Declaration*/
fpost_t stream_sdout;
/*code*/
if (fgetpos(stdout, &stream_sdout) == -1)
perror(Error:);
Dice ilegales buscan.
No tengo idea de por qué sucede esto.
Pero si logro que esto funcione, entonces solo necesito usar fsetpos(stdout, &stream_stdout)
y debería funcionar.
Mi segunda idea fue copiar el stdout usando dup2(stdout, 4)
en la tabla de descriptores de archivos, en la posición 4. Pero eso tampoco funciona.
¿Cómo puedo devolver la salida estándar a su destino original (terminal, tubería, archivo, lo que sea)?
Tengo la sensación de que intentar mover 'stdout' de esta forma probablemente sea una mala idea, ¿qué posición debería exactamente informar el _terminal_ en' fgetpos() '? ¿Por qué no simplemente abrir un archivo y enviarlo usando 'fwrite()' o 'fprintf()' o 'write()' y salir al terminal a través de '/ dev/tty' cuando lo necesite? – sarnold
@sarnold: probablemente porque el programa tiene bibliotecas u otro código inalterable que están cableados a 'stdout'. – wallyk
@sarnold en realidad no pensé en esa posibilidad. Déjame revisar rápidamente. – Alessandroempire