
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
Linuxプログラミングで、キーボードの値がほしい
C言語・C++・C#
-
5
C言語で今まで表示していた画面の消すには?
C言語・C++・C#
-
6
C言語で、string.h conio.hを使いたい
C言語・C++・C#
-
7
実行ファイルのパスを取得したい
C言語・C++・C#
-
8
コンパイルエラーについて
C言語・C++・C#
-
9
エスケープ文字の復帰(¥r)とはなんですか?
Java
-
10
C言語 エラーの原因がわからないので,見てほしいです
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C++でデスクトップGUIアプリ開...
-
これなにがちがうんですか??
-
あんまり考えたくないけど
-
プログラム言語について c言語...
-
C#でログファイルにファイルパ...
-
どうして+3
-
MACで動く実行ファイルをWindow...
-
C言語って古いですか?
-
擬似コード
-
Cのコンパイルでコメントアウト...
-
プログラミング 2つの整数を読...
-
大量のデータを読み込んで表示...
-
visual studio 2022でのC#プロ...
-
プログラミングc++を全く分か...
-
プログラマーです。このDB設計...
-
Python、プログラミングについ...
-
バッチファイルで以下のような...
-
mallocについて
-
トリプトファンってケト原性あ...
-
c言語
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルVBAでのネットワークプ...
-
[C#]リモートアクセスのProcess...
-
linux上でgetchを使いたい
-
VBScrptについて
-
C#で作成したDLLをExcelVBAで利...
-
Android「adb shell」パスを知...
-
VB.NetのWMIを用いたリモート端...
-
収集した緯度、経度の平均値の...
-
C++で引数の型の構造体をif文で...
-
VSSにてrights.datアクセス拒否...
-
c++のdllが参照できません
-
エラー'429'ACtiveXコンポーネ...
-
閲覧したスクロール位置に戻る...
-
JavaScriptでキオスクモードを...
-
sendmailとimodeの絵文字について
-
VB6からVB.NET作成DLL呼び出し...
-
【PHP】UUID・UDIDによる端末判...
-
docomoメール内でURLリンク
-
DBGrid のライセンスの取得に関...
-
androidはいつ頃はやりそうですか
おすすめ情報