4

何か間違ったことをしているといいのですが、kdbは名前付きパイプからデータを読み取れないようです(少なくともSolarisでは)。書き込まれるまでブロックされますが、書き込まれたデータは返されません。

テキストファイルを作成できます。

$ echo Mary had a little lamb > lamb.txt

そしてkdbはそれを喜んで読みます:

    q) read0 `:/tmp/lamb.txt
enlist "Mary had a little lamb"

名前付きパイプを作成できます。

$ mkfifo lamb.pipe

そしてそれから読み込もうとしています:

    q) read0 `:/tmp/lamb.pipe

kdbがブロックされます。パイプへの書き込み:

$ cat lamb.txt > lamb.pipe

kdbは空のリストを返します:

()

kdbは名前付きパイプから読み取ることができますか?私はただあきらめるべきですか?私はそれが許可のことではないと思います(私は-m 777自分のmkfifoコマンドで設定を試みましたが、それは違いがありませんでした)。

4

4 に答える 4

1

失敗した場合read0は、 で偽装することがよくありますsystem"cat ..."。(これはもともと /proc からも連携しないものを読み取ろうとしたときに見つかりましたread0。)

q)system"cat /tmp/lamb.pipe"
<blocks until you cat into the pipe in the other window>
"Mary had a little lamb"
q)

呼び出しにはかなり高いオーバーヘッドがあることに注意してください(qにそのようなものがあるため)system—コマンドが何であれ実行するためだけにシェルプロセス全体を生成します

カスタム C 拡張機能を使用して直接実行することもできます。おそらくread(2)直接呼び出します…</p>

于 2012-03-23T02:25:39.403 に答える