C からの stdin と stdout の再ルーティング

freopen() を使用する理由 ? C89 仕様の <stdio.h> に関するセクションの文末脚注の 1 つに答えがあります。 :

freopen よく誤用されます。 stdin = freopen("newin", "r", stdin); .これは fclose(stdin); stdin = fopen("newin", "r"); より移植性がありません .どちらの式も stdin への代入を試みます 、割り当て可能であることが保証されていません。

freopen の正しい使い方 freopen("newin", "r", stdin); の割り当てを省略します。


freopen() のようなものを探していると思います


これは、Tim Post の方法の修正版です。 /dev/stdout の代わりに /dev/tty を使用しました。 stdout (/proc/self/fd/1 へのリンク) で動作しない理由がわかりません:

freopen("log.txt","w",stdout);
...
...
freopen("/dev/tty","w",stdout);

/dev/tty を使用すると、アプリが起動された端末に出力がリダイレクトされます。

この情報がお役に立てば幸いです。