freopenで変更したstdinを元に戻すには?

[戻る]
たいちう 2002/07/03(水) 14:26:46
いつもお世話になっております。たいちうです。

質問はタイトルの通りで、テキストファイルの読み込みにgetcharを使いたかったので、
freopen("sample.txt", "r", stdin)としたのですが、
読み込み後にキーボードの入力の為にstdinを戻すにはどうしたらよいのでしょうか。

戻すのが不可能なら、getcharを使わないで作ればよいのですが、
ご存じの方がいましたら教えて下さい。

【環境】Win98 + VC6.0SP5, コンソールプログラム

クラフトマン 2002/07/03(水) 15:38:22
>読み込み後にキーボードの入力の為にstdinを戻すにはどうしたらよいのでしょうか。

たぶん、標準の機能では出来ないと思います。
標準からは外れますが、_fileno関数, _dup関数, _dup2関数を使えば可能です。

>戻すのが不可能なら、getcharを使わないで作ればよいのですが。

なぜ、getcharを使いたいのでしょう。標準入力をリダイレクトしたいのかな?
そうではなくて、単純に読み込むだけなら、fgetc関数を使えばよいと思います。

駄犬 [E-Mail] 2002/07/03(水) 16:29:28
試してないけど
freopen("con", "r", stdin)
でもだめかしら?

クラフトマン 2002/07/03(水) 17:34:47
>freopen("con", "r", stdin)
>でもだめかしら?

ああ、そうか!
コンソールデバイスをstdinに結びつけると。思いつかなかった(^^;
出来そうですね。

たいちう 2002/07/03(水) 17:36:05
[[解決]]
駄犬様

freopen("con", "r", stdin)で、できました。ありがとうございます。


クラフトマン様

とりあえず解決しましたので、
_fileno関数, _dup関数, _dup2関数は、後の課題とさせてもらいます。

getcharを使うのは大した理由ではありません。
K&Rのサンプルをいじっていたんですが、

手を加える部分をできるだけ少なくして、ファイルに対応させたい。
↓
freopen("sample.txt", "r", stdin) が使える。
↓
テキスト読み込みの後に、キーボードからの入力ができなくなってしまった。
(あたりまえや)
↓
元に戻せないだろうか?

という理由でした。
fopenで普通に読み込む方法は知っていましたが、
簡単にstdinを戻せないだろうか?と思って、
MSDNや過去ログを調べても解らなかったので質問させてもらいました。
ありがとうございました。

古いスレッドには追加発言できません。