freopenで変更したstdinを元に戻すには? – プログラミング – Home

freopenで変更したstdinを元...
 
通知
すべてクリア

[解決済] freopenで変更したstdinを元に戻すには?


たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

いつもお世話になっております。たいちうです。

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

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

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


引用未解決
トピックタグ
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

>読み込み後にキーボードの入力の為にstdinを戻すにはどうしたらよいのでしょうか。

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

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

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


返信引用
駄犬
 駄犬
(@駄犬)
ゲスト
結合: 23年前
投稿: 59
 

試してないけど
freopen(con, r, stdin)
でもだめかしら?


返信引用
クラフトマン
 クラフトマン
(@クラフトマン)
ゲスト
結合: 24年前
投稿: 72
 

>freopen(con, r, stdin)
>でもだめかしら?

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


返信引用
たいちう
 たいちう
(@たいちう)
ゲスト
結合: 23年前
投稿: 662
Topic starter  

駄犬様

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

クラフトマン様

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

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

手を加える部分をできるだけ少なくして、ファイルに対応させたい。

freopen(sample.txt, r, stdin) が使える。

テキスト読み込みの後に、キーボードからの入力ができなくなってしまった。
(あたりまえや)

元に戻せないだろうか?

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました