
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で質問しましょう!
似たような質問が見つかりました
- UNIX・Linux ChromebookでPythonを使いたい! けれどLinuxが入らない… 4 2022/05/05 08:49
- UNIX・Linux TCPWrapper のインストールについて 4 2022/10/06 13:27
- その他(OS) crostiniでibus-mozcが使いたい 2 2022/08/22 14:35
- その他(パソコン・スマホ・電化製品) LINUXPCに詳しい人に気楽に答えてほしい質問です。 2 2022/10/25 08:07
- UNIX・Linux UNIX manページとか見る頻度高いの? 特にCLIばかり使っている人のなかで というかCLIとか 3 2023/05/22 17:06
- UNIX・Linux Chromebook Linux Extundeleteエラー 4 2022/07/03 17:20
- UNIX・Linux 【初心者】aws lightsail で自作のオリジナルテーマのwordpressを設定する方法 1 2022/07/14 09:46
- UNIX・Linux Linuxのパーティションタイプ(MBR/GPT)について 2 2022/07/26 13:35
- UNIX・Linux HDMI端子とUSB端子がついているHDMI Video CaptureにおいてHDMI端子にテレビ 4 2022/05/09 05:46
- その他(OS) CloudreadyでLinuxのセットアップが出来無い 1 2022/04/06 12:36
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語 1文字入力(Enterキーなし)
C言語・C++・C#
-
Linuxで入力待ちなしkeyread関数のようなものはありますか?
C言語・C++・C#
-
標準ライブラリだけでgetch関数を作成する方法
C言語・C++・C#
-
-
4
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
5
C言語で、string.h conio.hを使いたい
C言語・C++・C#
-
6
fgetsなどのときのstdinのバッファを消すには?
C言語・C++・C#
-
7
ループを途中で抜けたいのですが。
C言語・C++・C#
-
8
エスケープ文字の復帰(¥r)とはなんですか?
Java
-
9
Linuxプログラミングで、キーボードの値がほしい
C言語・C++・C#
-
10
C言語でgetchar();が上手く使えずに困っています‼ void input(char *cx,
C言語・C++・C#
-
11
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
DLLファイルの逆コンパイラにつ...
-
プログラマー達は何故、プログ...
-
C#でTreeViewのCheckBoxのサイ...
-
visual studio 2022でのC#プロ...
-
略語の読み方について
-
c言語
-
C言語の関数のextern宣言
-
【C言語】全角文字の配列を、全...
-
最初に聞かれたこと
-
C言語 関数、変数の宣言について
-
あってる
-
C言語のことです。写真(見にく...
-
プログラミング言語についてc++...
-
UART通信の取説で,left floati...
-
パソコン
-
gccを行ってもexeファイルが生...
-
VisualStudio2022でC言語プログ...
-
C++でデスクトップGUIアプリ開...
-
C言語について。
-
C言語 解答について。
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
linux上でgetchを使いたい
-
エクセルVBAでのネットワークプ...
-
[C#]リモートアクセスのProcess...
-
VBScrptについて
-
JavaScriptでキオスクモードを...
-
携帯サイトの.htaccessによるア...
-
VB .NETで作成したソフトが、他...
-
android開発初心者です。 2つの...
-
C#で作成したDLLをExcelVBAで利...
-
C++で引数の型の構造体をif文で...
-
docomoメール内でURLリンク
-
"\\"(円マーク)が入ってしまい...
-
デバイス別に振り分けるJavaScr...
-
MACアドレスについて
-
エラー'429'ACtiveXコンポーネ...
-
【PHP】UUID・UDIDによる端末判...
-
収集した緯度、経度の平均値の...
-
Android「adb shell」パスを知...
-
FindFirstFileのファイル属性の...
-
レスポンシブWebとjQuery Mobile
おすすめ情報