0

システム上のさまざまなプロセスのプロセススペースで実行されているDLLがJavaプロセスと通信する必要があるJNIコードを少し書いています。共有メモリ/ソケット/rpcなどを評価した後、(さまざまな理由で)名前付きパイプを使用することにしました。私の質問は、Javaで名前付きパイプを処理する良い方法はありますか、それとも作成する必要がありますか?

4

2 に答える 2

1

Unix で実行していると仮定すると、パイプを exec で作成してから、File*Stream で読み書きできませんか?

@Test public void pipe() throws IOException, InterruptedException {
    Runtime.getRuntime().exec("mkfifo mypipe");

    final String[] read = new String[1];
    Thread t = new Thread() {
        @Override
        public void run() {
            try {
                BufferedReader r = new BufferedReader(new FileReader("mypipe"));
                read[0] = r.readLine();
            } catch (IOException e) {
            }
        }
    };
    t.start();

    FileWriter w = new FileWriter("mypipe");
    w.write("hello\n");
    w.flush();
    t.join();

    assertEquals("hello", read[0]);
}
于 2009-11-03T12:04:00.870 に答える
0

以前は、プロセスの入力ストリームと出力ストリームを介してプロセス通信を行っていました。たとえば、

Process p = Runtime.getRuntime().exec("myproc");
OutputStream is = p.getOutputStream();
BufferedOutputStream bis = new BufferedOutputStream(is);
bis.write("your_command");

同様に、入力ストリームを使用して、他のプロセスがあなたに伝えなければならないことを読み取ることができます。

于 2009-11-03T12:00:05.763 に答える