2011-12-07 9 views
0

私の外部プログラムで、私はPDFファイルを作成し、erlangプログラムに渡そうとします。しかし、PDFにはEOTシンボルが含まれています。最初のEOTに達すると、転送が停止します。出力でos:cmdとEOTシンボルを使用

ファイル全体をどのように渡すことができますか?

が、これは全体の生成されたファイルを返すdoesntの、sarnold後

os:cmd(io_lib:format("LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib; 
    export LD_LIBRARY_PATH; /home/yola/progra/cpp/pdf/a.out ~s", ["Hello"])) 

を追加しました。最初のEOTシンボルは2305 posであり、erlangは2304シンボルですが、ファイル長は64xxxバイトです。

+0

あなたが持っているつもりだここにいくつかのソースコードを表示する - 私はどのように単一のASCII文字を想像することはできませんコンピュータ間の "譲渡"宇宙船の "移転"が失敗する可能性があります。可能であれば、20〜30行のコードで問題を実証しようとしてください。 – sarnold

答えて

1

os:cmd関数は、外部プログラムからの読み込みをいつ終了するかを知るためにEOTを使用します。 os.erlを参照してください。ですから、そのようなファイルに出力をリダイレクトするように、いくつかの他の方法でそれを行う必要があるでしょう:

os:cmd(io_lib:format("LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib; 
    export LD_LIBRARY_PATH; /home/yola/progra/cpp/pdf/a.out ~s > my.pdf", ["Hello"])), 
{ok, MyPDF} = file:read_file("my.pdf") 
+0

ありがとうございました。今のところ、すべてのEOTをシンボルに置き換え、生成されたファイルの先頭にメタ情報を挿入し、erlangで解析してから元に戻します。ありがとう、あなたの提案。 – Yola