- 締切済み
C言語で、文字とか入力されなくても実行を続けたい
現在簡単なゲームをunix系のOSのC言語でつくってますが なにも入力されなくても停止せず実行を続けられる getcharのような関数はないのでしょうか? windows系のOSにはcons.hヘッダーあたりに そんな関数あったような気がするのですが。。。 普通のgetcharだと、文字が入力されるまで(enter押されるまで) そこで実行が一時中断されてしまい リアルタイムで動くプログラムができないのですが。。。
- みんなの回答 (6)
- 専門家の回答
みんなの回答
- MovingWalk
- ベストアンサー率43% (2233/5098)
kbhit()相当の関数を作ればいいのですが... こちらをよく読むと参考になるかもしれません。 http://www.nishimoto-site.net/archiver/fj/os/linux/200210/msg00089.html
- ranx
- ベストアンサー率24% (357/1463)
再びNo.4です。 前の回答中に書いたCBREAKモードは、Enterキーの入力を 待たずにキー入力を行う機能でした。 今回は関係ありませんので、無視して下さい。
- ranx
- ベストアンサー率24% (357/1463)
一般的には、マルチスレッドにする必要は無いと思います。 No.1さんのご指摘通り、ioctl()を使ってrawモード(CBREAKモードというのもあったような気が...) にすれば、getchar()が直ちに-1を返すようにできると思います。 ただ、お使いのUNIXやデバイスによって、制約はあるかもしれません。
お礼
回答ありがとうございます ioctlを調べて使ってみようと思います
- garyu77
- ベストアンサー率45% (30/66)
イマイチ意味が分からないのですが。。。 consio.hのgetch、getche辺りの話をしてるのかな? それとも入力待ち時間中も別処理をしたいって事ですかね? そうなると通常のProgramでは一本の動きしか出来ませんよ。 あくまで【通常】ですけどね。 入力待ちの時に別処理をしたいのであれば、プロセス管理とかしないと無理かなぁ… プロセス管理を行って、処理Aをさせている最中に処理Bするって事になるとforkとか....
補足
実行が停止しないgetcharみたいな関数とは windowsのconsio.hのgetchとかのことです うろ覚えであいまいな書き方になってました… 例えばシューティングゲームを作るとしたら、 プレイヤーが何にも入力してなくても ゲームの処理は実行されてなければなりません。 でも、C言語標準のgetchar関数では 入力が終了するまでプログラムの実行が 停止されてしまうので、 そうならない関数や方法を探してるのです。 あと、forkとかできれば使いたくはないのですが… 一つのプログラムだけでできないのでしょうか…
- neKo_deux
- ベストアンサー率44% (5541/12319)
原始的な方法ですと… プログラムA(実際の処理) ファイル"test.txt"を開く。 ファイルに文字が入力されていれば何らかの処理を行い、空のファイルを上書きする。 ファイルを閉じる。 リアルタイムの処理を実施。 繰り返し。 プログラムB(入力処理) getcharで入力を待つ。 入力を受け付けたらファイル"test.txt"を開いて何か書き込む。 繰り返し。 の2本立てで動作するとか。 (上の仕様だとイロイロ問題が起きて、それはそれで面白いのですが…) -- 最近の普通の方法ですと、マルチスレッドとか、スレッド同期とか、そういうキーワードで情報収集してみては?
お礼
回答ありがとうございます。 複数のプログラムを一度に実行するつもりもなく マルチスレッド等を用いるつもりもありませんでしたが こういう方法も試してみようと思います。
- Code_Blue_Ocean
- ベストアンサー率33% (5/15)
はじめまして。 Linuxに関してしか知らないので、その点はご了承ください。 Googleで「stty」、「Linux」、「rawモード」をキーワードにして検索したところ、参考URLのページを見つけました。 MLの過去ログですので、その前後を参照していただければ、もう少し詳細が分かるかもしれません。 ・・・と、最近こればっかりですので、もう少し。 「Linux システムコール」(塚越 一雄 著/技術評論社 ISBN4-7741-1031-0)という本があるのですが、この本にも関連する話題が載っています。 システムコールについて書かれた本なのですが、私が手に取った本の中では、一番読みやすくまとめられていました。 他の情報源としては、JFやJMが挙げられるかと思います。 日本語で情報を得ることができるので便利です。 JF → http://www.linux.or.jp/JF/ JM → http://www.linux.or.jp/JM/ 長文・駄文、失礼致しました。
お礼
回答ありがとうございます 参考URLを参照してみようと思います。
お礼
回答ありがとうございます これらのページを参照してみようとおもいます