dポイントプレゼントキャンペーン実施中!

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

A 回答 (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;
}
    • good
    • 2

Ncursesを使うというのは?

    • good
    • 1

検索してみた。



参考URL:http://cboard.cprogramming.com/archive/index.php …
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています