2017-02-17 1 views
0

私はシリアルポートを待ち受けて、データを処理するためにjavaプログラムに送るために、cプロセスを使用しています。私はそれを読む前にFIFOをリンク解除する必要がありますか?

mkfifo()を呼び出すcプログラムを実行すると、ブロックされ、Javaプログラムがもう一方の端を開くのを待っています。

Javaプログラムがもう一方の端を開くと、cプログラムはループに入り、シリアルポートから読み取り、ファイル記述子でwrite(fd)を呼び出します。

Javaプログラムは、Cプロセスを終了するまで、またはCプロセスがunlink()を呼び出すまで、データを取得しません。

これはデータを渡す唯一の方法ですか?メッセージキューを開いたままにしたい場合は、メッセージキューを使用する必要がありますか?

私の研究から、writeはバッファリングされていないようですので、私はファイルポインタを使用していた場合はfflushのような何もする必要はありませんが、なぜ送信しないのですか?

+0

Cプログラムが 'write()'を使ってFIFOに書き込みを行っている場合は、Javaプログラムが読むための準備が整っていなければなりません。問題は "what is the Javaプログラムしている "?これを実証するには、Cプログラムを使ってJavaの代わりにFIFOを読み込む方法があります。例えば ​​'cat/path/to/FIFO'を実行して読み込みます。 FIFOのリンクを解除する必要はありません。再オープンする必要があるかもしれません。あなたが読んでおり、ライターが残っていない場合は、データをさらに取得する前に閉じてから再度開く必要があります。あなたが書いているのであれば、同様の問題があるかもしれません。 –

+0

あなたはそうです、猫は働くので、おそらくJavaの終わりです。私はチャンスを取ってそこに何が起こっているのかを見てみましょう –

答えて

-1

読み込み側でO_ASYNCフラグを設定していますか?

+0

申し訳ありませんが、私はコメントしていましたが、回答していません... – borodin

0

私は、readの代わりにbufferedreader.readLine()を使用していました。

関連する問題