• ベストアンサー

linux上でgetchを使いたい

linux上でgetch()を使おうと思い、<conio.h>をインクルードしたのですが、未定義のエラーが出てしまいます。どうやら、linuxでは、<conio.h>が無い?みたいなのですが、どうやったら、getch()を使用できるようになるのでしょうか??

質問者が選んだベストアンサー

  • ベストアンサー
  • noocyte
  • ベストアンサー率58% (171/291)
回答No.3

基本的には #1 さんの参考 URL の方法でいいですが, mygetch() を呼ぶたびに tcgetattr(),tcsetattr() するのでちょっと無駄が多い. (性能低下を招くほどではありませんが.) アプリケーションの起動から終了まで,あるいは一定期間 raw モードだけを 使うのなら,次のサンプルのように一度端末モード設定をしてあとは普通に getchar() を使う方が効率は (少しですが) いいです. /*-------------------------------------------------------------------------- サンプル ・1文字入力するたびに標準出力に出力する. ・制御文字は16進で出力. ・CTRL-D を押すと終了. --------------------------------------------------------------------------*/ #include <stdio.h> #include <unistd.h> #include <termios.h> #define QUIT_CHAR 0x04 /* CTRL-D を押すと終了する.*/ // 端末設定保存用大域変数 struct termios CookedTermIos; // cooked モード用 struct termios RawTermIos; // raw モード用 int main(void) {   int c;   // 初期状態の端末設定 (cooked モード) を取得・保存する.   tcgetattr(STDIN_FILENO, &CookedTermIos);   // raw モードの端末設定を作成・保存する.   RawTermIos = CookedTermIos;   cfmakeraw(&RawTermIos);   // 端末を raw モードに設定する.   tcsetattr(STDIN_FILENO, 0, &RawTermIos);   // 1文字入力されるごとに標準出力にエコーする.   while((c = getchar()) != QUIT_CHAR) {     if(isprint(c)) {       // 印字可能文字の場合:そのまま表示.       putchar(c);     } else {       // 制御文字の場合:16進で出力.       printf("<%02X>", c);       if(c == '\n') fputs("\r\n", stdout);     }   }   // 端末設定を元に戻す.   tcsetattr(STDIN_FILENO, 0, &CookedTermIos);   putchar('\n');   return 0; }

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

Ncursesを使うというのは?

  • koko_u_
  • ベストアンサー率18% (459/2509)
回答No.1

検索してみた。

参考URL:
http://cboard.cprogramming.com/archive/index.php/t-27714.html

関連するQ&A