廃棄施設

何かの進捗やら何やらで埋まっていく……予定地

C言語(Linux環境)でキーボード入力をリアタイでやりたい!!!

タイトル通りです(学習が進むたびに随時追記)。

 

 

というわけで、

今日からスーパーハカー : [C]キーボードの入力を取得する - getch(),getchar() (livedoor.jp)

【C言語】kbhit・_kbhit関数について (hotnews8.net)

を見てみる。

 

kbhit関数!conio.h!!Windows!!!

無理ですね。

 

ということなので、

【C言語】Linuxでのkbhit関数(キーイベントの取得) (hotnews8.net)

を読んでみる。

 

termios, tcgetattr, STDIN_FILENO, c_lflag, ICANON, tcsetattr, etc...

ち、知識がなさすぎてわけわからん……。

ので、様々な文書を参考に脳みそを作っていこう。

 

 

疑問1:termiosって何さ?

 参考文献:Linux のシリアル通信において termios 構造体で設定可能なパラメータをまとめる (C/C++) - siar (hatenablog.com)

 

termios はターミナルI/O用の Unix API です.

 termiosの姿が見えました。

 

ついでにUnix APIに関して、

システムコールを理解する | UNIX world (weblike.jp)

を読んだ。

 

 

疑問2:tcgetattrとは何ぞや

参考文献:if0604_60.pdf (cqpub.co.jp)tcgetattr() - 端末の属性の取得 (ibm.com)

 

謎が謎を呼ぶ状態になってしまったのでここちょっと長いです。

私と同じく基礎知識0からダンジョン攻略する人間へ、1プロトン程度でも役立てば幸いです。(まあ、検索で引っかからなさそうな感じもしますな)

 

まず、参考文献1個目。

リスト 1 に示すように,押下した文字が表示されないように,処理の前後で端末属性を変え,非カノニカル・モードにするため,termios 構造体を tcgetattr,tcsetattr 関数で操作

 わからん。

 

 まあ、端末属性って単語は一旦置いておいて、

なんにもわからん「非カノニカル・モード」をやっつけます。

Linuxで同期・カノニカルデータ受信 (fc2web.com)を見よ。

 

次に、参考文献2個目。

int tcgetattr(int fildes, struct termios *termptr);

なるほどね、わからん。

 

とりあえず、Operating Systems. Exercises. (u-aizu.ac.jp)によると、

fildesは「ファイルディスクリプタ」なるものだそうです。

ファイルディスクリプタ(ファイル記述子)とは - IT用語辞典 e-Words (e-words.jp)

 

*termptr は参考文献2-2にも書かれていたように、メモリ位置を指すらしい。

5 アドレス演算子(&)と間接演算子(*) (nagoya-u.ac.jp)によると、

& は変数が割り当てられているメモリのアドレスを得る演算子

 とのこと。

だから &oldt って書いてあったのか。

 

 

編集に使うURL先置き

プログラムの入出力 - C言語入門 (jpn.org)

tcsetattr() - 端末の属性の設定 (ibm.com)