Cからのstdinとstdoutの再ルーティング
質問
を再度開きたいのですが
stdin
と
stdout
(そしておそらく
stderr
を呼び出すことができるように、ファイルハンドルを作成しました。
printf()
または
putchar()
または
puts()
を呼び出すとファイルに移動し、今後
getc()
などの呼び出しはファイルから行われます。
1) 標準入力/出力/エラーを永久に失いたくありません。私はプログラムの中で後でそれらを再利用したいかもしれません。
2) 新しいファイルハンドルを開きたくない。なぜなら、これらのファイルハンドルはたくさん渡されるか、グローバルでなければならないからです (震え声)。
3) 私はどんな
open()
または
fork()
などのシステム依存の機能は、どうしようもないとして。
で、基本的に、これをやるとうまくいくのか。
stdin = fopen("newin", "r");
また、もしそうなら、どうすれば元の値の
stdin
の元の値を取り戻すことができるでしょうか?それを
FILE *
に格納し、後でそれを取得する必要がありますか?
どのように解決するのですか?
なぜ
freopen()
? C89 仕様では、以下のセクションの注釈の 1 つにその答えが記載されています。
<stdio.h>
:
116. の主な用途は
freopen
関数は、標準的な テキストストリーム (stderr
,stdin
またはstdout
など)、これらの識別子は が返す値が変更可能な値である必要はありません。 が返す値。fopen
関数 が割り当てられることがあります。
freopen
は一般的に誤用されており、例えば
stdin = freopen("newin", "r", stdin);
. これは
fclose(stdin); stdin = fopen("newin", "r");
. どちらの表現も
stdin
に割り当てようとするもので、割り当て可能であることは保証されていません。
の正しい使い方は
freopen
は、代入を省略することです。
freopen("newin", "r", stdin);
関連
-
構造体の配列--[エラー] '['トークンの前に一次式があることが予想される
-
g++が内部・外部コマンドソリューションとして認識されない、MinGWを初めて使うときの落とし穴
-
[解決済み] PTHREAD_MUTEX_INITIALIZER vs pthread_mutex_init ( &mutex, param )
-
[解決済み] 1ビットのセット、クリア、トグルはどのように行うのですか?
-
[解決済み] HTMLページからのリダイレクト
-
[解決済み] ++iとi++の違いは何ですか?
-
[解決済み] mallocとcallocの違い?
-
[解決済み] char s[]とchar *sの違いは何ですか?
-
[解決済み] C言語でファイルが存在するかどうかを確認する最も良い方法は何ですか?
-
[解決済み] C言語のi++と++iに性能差はあるのでしょうか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
コンパイルエラー:可変長オブジェクトが初期化されていない可能性があります。
-
[解決済み] ⑭と⑯は何のためにあるのですか?
-
[解決済み] CコードでEOFを表現する?
-
[解決済み] c または c++ 用のシンプルな 2 次元クロスプラットフォームグラフィックスライブラリ?[クローズド]
-
[解決済み] C関数から文字列を返す
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語における「static」の意味とは?
-
[解決済み] Cコードの単体テスト【終了しました
-
[解決済み] 演算子 *, /, +, -, % を使わずに 3 で割る。
-
[解決済み] C言語の構造体(CGRectやCGPointなど)をNSLog化することは可能ですか?