2012-01-09 4 views
4

私はstdinから読み込んで結果を生成する外部exeプログラムを持っています。これはwcプログラムのように機能し、EOFまで読み取ります。 (またはストリームの終わりではなく)Erlangポート: "wc"のようなプログラムとのインターフェース?

更新:私は基本的にErlangパイプを書くことを試みています。

echo 339371249625 | LookupProj.exeのようなバッチファイルでプログラムを呼び出すことができますが、Erlang gen_serverからデータを渡すことができます。

私はErlang港を見ましたが、私は彼らがいい遊びをするのに問題があります。ここで私が持っているものです。

test(InputText) -> 
    P = open_port({spawn, "/ExternEvent/LookupProj.exe"}, [stream, exit_status, use_stdio, 
          stderr_to_stdout, in, out]), 
    IBin = list_to_binary(InputText), 
    %% io:format("~p~n",[I2]), 
    P ! {self(), {command, <<IBin/binary, <<26>>/binary>>}}, %% ASCII 26 = EOF 
    P ! {self(), {eof}}, %% ERROR -- how to close stdin of the cat process? 
    receive B -> io:format("~p",[B]) end. 

ノー助けにopen_porteofフラグを使用してみました。 (これが正しいフラグであるかどうか分かりません)

どこが間違っていましたか?ありがとう!

答えて

1

私が正しく理解している場合は、などの複数のコール間でポート接続を再利用しようとしています。echo 339371249625 | LookupProj.exeしかし、afaikはstdinを閉じるための唯一の方法は実際にはport_close/1でポートを閉じることです。このダンスポートはすべてos:cmd/1でコマンドを起動するよりも優れていません。

このLookupProj.exeを変更できるのであれば、コマンドの終わりとしてstdinで定義済みのバイトシーケンスを検討し、EOFの代わりに完了するたびに送信することをお勧めします。

関連する問題