![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
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#
-
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
-
4
標準ライブラリだけでgetch関数を作成する方法
C言語・C++・C#
-
5
<conio.h>?
C言語・C++・C#
-
6
Linuxプログラミングで、キーボードの値がほしい
C言語・C++・C#
-
7
入力を待たずにstdinの監視をしたい(C言語)
C言語・C++・C#
-
8
C言語で、string.h conio.hを使いたい
C言語・C++・C#
-
9
C言語で作成したプログラムの、エコーバックをなくしたい…。
C言語・C++・C#
-
10
waitせずにキー入力があった場合のみ処理をさせたい(C言語)
C言語・C++・C#
-
11
conio.h? curses.h?
C言語・C++・C#
-
12
Enterキーを押されたら次の処理に移るという事をしたい。
C言語・C++・C#
-
13
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
14
C++でのリアルタイム入力の方法を教えてください
C言語・C++・C#
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Python、プログラミングについ...
-
C言語階乗の総和を求める
-
c++でテンプレートのコードでわ...
-
バッチファイルで以下のような...
-
C言語 配列と関数の練習問題
-
c言語
-
C言語初心者 ポインタについて...
-
応用情報技術者試験の令和元年...
-
インクリメント演算子のみを用...
-
プログラミングの課題がわから...
-
プログラミングについて。 1つ...
-
c言語
-
C#でログファイルにファイルパ...
-
右ビットシフト
-
Linux Cプログラミングを学ぶた...
-
VisualStudioで、コードを印刷...
-
gcc13.2のバグ?
-
なんで
-
mallocについて
-
システムエンジニアの適正について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
linux上でgetchを使いたい
-
エクセルVBAでのネットワークプ...
-
親スレッドが子スレッドを監視...
-
VB.NetのWMIを用いたリモート端...
-
VBScrptについて
-
C#で作成したDLLをExcelVBAで利...
-
JavaScriptでキオスクモードを...
-
[C#]リモートアクセスのProcess...
-
docomoメール内でURLリンク
-
VB .NETで作成したソフトが、他...
-
DBGrid のライセンスの取得に関...
-
VSSにてrights.datアクセス拒否...
-
会員制動画配信サイトを作りた...
-
閲覧したスクロール位置に戻る...
-
HYBRIDW-ZERO3をPC3台と同期し...
-
VB6からVB.NET作成DLL呼び出し...
-
Android「adb shell」パスを知...
-
C++で引数の型の構造体をif文で...
-
iHTMLとCHTMLの違いを教えてく...
-
収集した緯度、経度の平均値の...
おすすめ情報