
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;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CSSが全く分かりません、お助け...
-
DLLファイルの逆コンパイラにつ...
-
プログラム言語について c言語...
-
C言語について(初心者)
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
今ってプログラミング言語は何...
-
逆コンパイルと逆アセンブルの...
-
次の日本語の意味を教えて下さい
-
int16_t の _t は何?
-
Windows Formアプリからコンソ...
-
最初に聞かれたこと
-
Cのプログラムからアクセスでき...
-
プログラミング言語についてc++...
-
C#でTreeViewのCheckBoxのサイ...
-
c#のTLS1.2での通信について
-
プログラマー達は何故、プログ...
-
PIC12F1822でLED調光器を作りたい
-
C言語 関数、変数の宣言について
-
あってる
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでのネットワークプ...
-
linux上でgetchを使いたい
-
VBScrptについて
-
VB .NETで作成したソフトが、他...
-
C#で作成したDLLをExcelVBAで利...
-
[C#]リモートアクセスのProcess...
-
親スレッドが子スレッドを監視...
-
【PHP】UUID・UDIDによる端末判...
-
JavaScriptでキオスクモードを...
-
USBデバッグ
-
"\\"(円マーク)が入ってしまい...
-
i Pod Touchをシリアル番号から...
-
.NetのWebBrowserについて
-
C++で引数の型の構造体をif文で...
-
Android「adb shell」パスを知...
-
閲覧したスクロール位置に戻る...
-
プログラミング
-
docomoメール内でURLリンク
-
MACアドレスについて
-
携帯用サイトの制作について
おすすめ情報