2012-08-17 15 views
5

Tengo una función que necesita poder escribir en stdout o en un archivo, dependiendo de lo que el usuario desee. Sin embargo, por defecto es estándar. Para lograr esto, estoy haciendo lo siguiente (menos la comprobación de errores, etc):¿Está configurando un FILE * igual a stdout portable?

FILE* out; 
if (writeToFile) { /*Code to open file*/; } 

else 
    out = stdout; 

// ...rest of the function goes here 

if (out != stdout) 
    fclose(out); 

Esto sin duda hace el truco, pero no tengo ni idea de lo que es portátil. Y si no es así, y/o hay otro problema con él, ¿cómo debería hacerlo?

Respuesta

8

Sí, es portátil y está bien, siempre y cuando no también meterse con la implementación de bajo nivel de *stdout (por ejemplo llamando close(fileno(stdout)) en Posix o el uso de dup).

1

Debería estar bien. Puede tener problemas si pasa el puntero hacia adelante y hacia atrás a través del límite de una DLL (es decir, el código C fuera de DLL pasa el puntero a stdout al código C dentro de la DLL), pero aparte de eso debe ser portátil.

Cuestiones relacionadas