リナックスカフェで半日を過ごした。
getchar は改行するまで待たされるのに curses の getch は待たされない。
最初、シェルが何かしてるんじゃあないかと思ったけれど、ps しても tty は同じだし、大体冷静に考えてシェルが何かやってるわけがない。仕方がないので結局いつもどおり screen のコードを追っかけて、ようやく「カノニカルモード」の存在を知った。
家に帰ってきてからグーグル先生に聞いたらこれは FAQ だった。zero3 の USB ケーブルさえ忘れなければ超大作 main 関数を読まずに済んだのに…というほど読んでないけれど。
tcgetattr で元の状態を記憶しておいて、tcsetattr で非カノニカルモードに変更後、状態を復元する、というコードをそのまま書いても何故か端末はちゃんと元に戻らない。ls とかの出力が正しくフォーマットされなくなるし、~ECHO ぽいのもダメ。うーん…?
とりあえず screen がそうしていたように setsid で新しいセッションを作るとうまくいく。1 セッション 1 端末ということは分かるんだけれど、元に戻らない理由は気になる。あと本当に 1 セッション 1 端末なのかどうかも気になる。
とりあえず明日はそのあたりを調べよう。
必ず忘れないように zero3 をつなぐ USB ケーブルを持っていくこと…
profile
niha
http://niha28.sakura.ne.jp/