非同期通信その2

入出力の多重化

プロセス間通信を行うには、ソケットのディスクリプタ(ソケット番号と呼んでもいい気が)を通じて行います。どのディスクリプタからデータが読めるかを管理するものとして、「fd_set」と呼ばれるデータ構造(ビットマスク)が用意されています。ディスクリプタを通じて非同期に入力するには、このビットマスクで使用したいディスクリプタを指定して、select関数を呼び出します。

  • 「fd_set」関連の定義位置
    sys/types.h内
  • 「fd_set」
    各ビットがディスクリプタに対応しています。例えば、ディスクリプタ「3」にはビット3が対応します。
  • 「fd_set」ビットマスク操作マクロ
    • FD_SET(n, p)
      ディスクリプタ「n」が有効にします。(pをアドレスとするビットマスクの第nビットを立てます。)
    • FD_CLR(n, p)
      ディスクリプタ「n」を無効にします。(pをアドレスとするビットマスクの第nビットをクリアします。)
    • FD_ISSET(n, p)
      ディスクリプタ「n」が有効かを返します。(pをアドレスとするビットマスクの第nビットが立っていれば「1」を返します。)
    • FD_ZERO(p)
      全てのディスクリプタを無効にします。(pをアドレスとするビットマスクをゼロクリアします。)
  • select関数の呼び出し
    • FD_SET()で有効にしたいディスクリプタを指定します
    • select(n, p, NULL, NULL, NULL)を呼び出します
      nは有効ビット幅の指定、第3,4,5引数はとりあえずNULLとします。
    • select関数を呼ぶと、ビットマスクの内容は壊れてしまうため、selectを呼ぶときにはテンポラリのビットマスクにコピーしてから呼び出すのが常套手段です。

今日はここまで。
いかん、全然進まん(^^;

非同期通信 その1

いよいよ非同期通信に入ります。題材は鬼ごっこ

画面制御「curses」ライブラリ

ちょっと寄り道になってしまうのですが、キャラクタベースの端末での制御が基本なので、お付き合いをします(^^;

  • curses」ライブラリを使用
    エスケープ文字列を直接扱うと端末の種類に依存してしまうので、「curses」ライブラリを使用します。
  • curses」ライブラリを使うと、キャラクタベースのウインドウが扱える
    ちょっとびっくり。へ〜。
    ウィンドウを扱う関数は、原始的だけど、ハンドルを使った擬似C++メンバー関数的な作りになっているのは、当たり前だけど関心しました。これならWindowsプログラミングの経験が役立つので、楽に理解できそうです。(こんなこと書くと、UNIXバリバリの人から怒られそうだな(^^;)
    • WINDOWオブジェクト生成:
      「WINDOW」オブジェクトへのポインタを宣言して、「newwin(行数, 桁数, 左上y座標, 左上x座標)」でインスタンス
    • Window枠の描画:
      「box(win, 縦線文字, 横線文字)」
    • 文字出力:
      「waddch(win, ch)」
    • カーソル移動:
      「wmove(win, y, x)」
    • 画面リフレッシュ:
      「wrefresh(win)」
    • 端末の設定変更:
      バッファリングをなくす「cbreak()」、エコーをやめる「noecho()」

今日はここまで。
RD-XS46導入でガンガン録れるようになったのが嬉しくて、録画消化が大変で時間が取れませんでした。これまた本末転倒(^^; 来週末に定期録画の内容を見直さないと、、、

晩酌

面倒なんで近所のスーパーで出来合いのものを。惣菜のおかずセット、マグロの刺身(サク)、冷奴に、安目の日本酒を冷やで。


さすがに、これではちょっと寂しいから、マッシュルームのバター炒めインド風(笑)を追加してみました。バターでちょっと念入りに炒めた後、ガラムマサラとクミンをかるく振っただけなんですが、酒の肴にはなかなか良い感じに仕上がりました。バターの塩分だけで、塩・コショウは不要です。3つくらい食べると飽きてくるので、醤油をたらすと、さらにいけます。始めにビールとこいつを組み合わせてたら良かったな〜。

RD-XS46

せっかく昨日届いていたのに疲れきっていたため、今日になって開封。セッティングしました。
TOSHIBA 250GB HDD&DVDレコーダー RD-XS46 W録+WEPG搭載


RD-XS30を使っていたため、基本的な操作は問題なし。ただ、ネットワーク設定ではまりました。うちは各部屋にLANを配線していて、アンテナ端子の横にLAN端子があるため、繋げばすぐに動くだろうとタカを括っていました。

ところが、付属のLANケーブルを接続しても繋がりません。説明書を読んでみると、付属のものはクロスケーブルとのこと(^^; 気を取り直して手持ちのストレートケーブルに交換しました。

それでも繋がりません。ルーター(NetGenesis Super Opt 90)のファームウェアを1年以上放ったらかしなのも良くないかも、ということでファームウェアをバージョンアップ。いつの間にかUPnPに対応していたり色々と機能が向上している模様。しまった(笑)

さあ、これで繋がるだろう、と思ったら繋がらず。ええっ?!もしや?とLANケーブルを交換。これでやっと接続できるようになり、ようやく電子番組表などフル機能が使えるようになりました。

NetGenesis Super OPT90
NetGenesis Super OPT90


まだ大して使ってませんが、簡単に気づいたところを以下にまとめておきます。(事前に気づいていた項目も挙げてます)

  • 電子番組表
    • 無茶苦茶便利
    • 調子に乗って録画予約すると、32番組はあっという間に埋まってしまう(^^;
    • ADAMSは指定時間にならないと番組表が更新されない
    • 標準機能では野球延長などによる放映時間のズレに対応していない
  • 録画実行中の制限
    この制限はRD-XS30でも不満が大きかった点なのですが、あまり向上していない印象です。
    • 予約のキャンセルが出来ない。予約録画中じゃない番組についても。なんで?
    • 裏録画(二つ目のチューナーでの録画)中に制限される機能が多い