2012-08-17 15 views
5

私は、ユーザーが望むものに応じて、stdoutまたはファイルに書き込むことができる必要がある関数を持っています。それは標準出力にデフォルト設定されています。これを実現するために、私は次の(マイナスのエラーチェックなどを)やってる:FILE *をstdout portableと同じに設定していますか?

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

else 
    out = stdout; 

// ...rest of the function goes here 

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

これは確かにトリックを行いますが、私はそれがどのようにポータブル見当がつかない。そうでない場合やそれに別の問題がある場合は、どうすればよいですか?

答えて

8

*stdoutの低レベル実装(たとえば、close(fileno(stdout))、またはdup)を使用していない場合は、移植性があり、問題ありません。

1

大丈夫です。あなたは、DLLの境界を越えてポインタを前後に渡すと問題が生じるかもしれません(つまり、DLLの外側のCコードはstdoutへのポインタをDLLのCコードに渡します)。

関連する問題