[printing-japan] Re: [printing-japan] Bi-di 資料

yoshida mikio-y @ zd6.so-net.ne.jp
2003年 12月 10日 (水) 07:53:33 PST


どうも、BBRの吉田です。

In message, "Masaki IWATA" <iwata @ axe-inc.co.jp>-san wrote on 
Wed, 10 Dec 2003 22:53:45 +0900...

> アックスの岩田です。
> 
> > > 仕様書のbidiStartReadの記述を参照ください。
> > 
> > すみません。ちゃんと書いてありますね。
> > まだ頭の中の情報がバラバラで、整理が追いつかないです。
> 
> で、仕様書の説明文についてですが、
> 
> bidiStartRead()
> 
> ・Bi-di Plug-in module は本関数が呼ばれたタイミングで、
>   呼び元に返すプリンタステータスデータを確定する。
> 
> ・プリンタステータスデータが確定するまで本関数はブロッ
>   クするが、シグナルの受信によって処理の途中で本関数か
>   ら戻る場合には、戻り値としてBIDI_EINTR を返す。
> 
> ・Bi-di Plug-in module がプリンタとのコネクションを確
>   立する処理によっては、本関数は長時間ブロックする可能
>   性がある。
>   呼び元が一定時間内の応答を規定したい場合は、本関数を
>   呼ぶ前にアラームを設定する等する。
> 
> bidiRead()
> 
> ・プリンタステータスデータのread が完了するまで本関数は
>   ブロックするが、シグナルの受信によってプリンタステー
>   タスデータのread の途中で本関数から戻る場合には、
>   nBufBytes で指定した値よりも小さい値を返す場合がある。
> 
> ・1 バイトもread せずにシグナルを受信した場合は、戻り値
>   としてBIDI_EINTR を返す。
> 
> ・Bi-di Plug-in module がプリンタとのコネクションを確立
>   する処理によっては、本関数は長時間ブロックする可能性が
>   ある。
>   呼び元が一定時間内の応答を規定したい場合は、本関数を呼
>   ぶ前にアラームを設定する等する。
> 
> と、なっていますよね。
> 
> bidiStartRead() での「プリンタステータスデータを確定する」
> とは、実際に read() したデータのことではないのですか?
> 
> プリンタからのデータを read() しているのは、どちらなので
> しょうか?
> 両方で read() しているのでしょうか?
> シグナルを捕捉した場合を想定しているのでしょうか?

質問の中の「どちら(両方)」は何を指すのでしょうか?
bidiStartRead と bidiRead ?
呼び出し元 と Plug-inモジュール ?

ともかくも、以下のメールが参考になると思います。 
尚、シグナルについては特別の想定はしていないと思いますよ。

In message, Yasumasa TORATANI <toratani.yasumasa @ canon.co.jp>-san wrote on 
Wed, 24 Sep 2003 23:21:58 +0900...

| 虎谷です。
<略>
| ということで、次のように Begin と End で read を挟む方式を提案します。
| 
|    while ( select( .....) ) {  // プリンタのfdの準備確認
|      // readが準備できていた場合
|      bidiBeginRead( ){
|      while(  ) {
|        bidiRead(..);  // XMLデータを順次 read
|      }    
|      bidiEndRead(..);
|    }
| 
|  プロセスタイプ:
|   プリンタステータスを勝手にプリンタから取得し続けて、それを
|   XML変換してバッファに格納しておく。また、XMLデータが準備
|   出来たら、パイプにその旨を示すデータ(仮にA)を書きこむ。
|   データAをパイプに書きこんだ後も、プロセス側はプリンタの
|   ステータスを読みこんで、XMLデータを更新し続ける。
| 
|   bidiBeginRead が呼ばれたら、プロセス側はXMLデータの更新を
|   サスペンドし、XMLデータのパイプへの書きこみ準備を行う。
|   呼び出し側は、データAを読み飛ばす。
| 
|   bidiReadが呼ばれたら、プロセス側はXMLデータを順次パイプに
|   書きこむ。呼び出し側は、パイプからデータを順次読み込む。
| 
|   bidiEndReadが呼ばれたら、プロセス側はXMLデータの更新を
|   再開する。
| 
|  共有ライブラリタイプ:
|   bidiBeginRead が呼ばれたら、plug-in はプリンタからステータスを
|   読みこんで、それをXML変換する。
| 
|   bidiReadが呼ばれたら、plug-inはXMLデータを呼び出し側に
|   順次返す。
| 
|   bidiEndReadでは特に何もしない。(read中フラグを落とすくらい?)


> # ブロックされる可能性があるのは、どちら(或いは両方)なの
> # かを知りたいだけなので、内部処理がどうなっているのかは
> # 呼び出し側にとってはあまり重要ではないのですが...
> 
> --
> IWATA Masaki
>  岩田 正樹

----
吉田 幹  mikio-y @ zd6.so-net.ne.jp
(有)BBR





More information about the Printing-japan mailing list