web-dev-qa-db-ja.com

JavaからWindows名前付きパイプを開く方法は?

Linuxシステムでは、プロセス間通信(プロデューサーとコンシューマー)に名前付きパイプを使用します。

コンシューマー(Java)コードをテストするために、コンシューマーに接続されている名前付きパイプに書き込むダミー​​プロデューサーを(Javaで)実装したいと思います。

これで、テストはWindows開発環境でも機能するはずです。したがって、JavaからWindowsで名前付きパイプを作成する方法を知りたいです。 Linuxではmkfifo(Runtime.exec()を使用して呼び出されます)を使用できますが、Windowsではどうすればよいですか?

26
Philipp

名前付きパイプを使用してJavaと.Netプロセス の間で通信します)

リンクの関連部分

try {
  // Connect to the pipe
  RandomAccessFile pipe = new RandomAccessFile("\\\\.\\pipe\\testpipe", "rw");
  String echoText = "Hello Word\n";
  // write to pipe
  pipe.write ( echoText.getBytes() );
  // read response
  String echoResponse = pipe.readLine();
  System.out.println("Response: " + echoResponse );
  pipe.close();
} catch (Exception e) {
  // TODO Auto-generated catch block
  e.printStackTrace();
}
24
v01ver

Windowsでは、 名前付きパイプが存在する ですが、それらは 書き込み可能なファイルシステムのファイルとして作成できません であり、コマンドラインツールはありません。それらは特別なファイルシステムにあり、Win32 APIを使用することによってのみ作成できます。

IPC-移植性がはるかに高いため、おそらく最良の長期的解決策として、ネイティブコードに頼るか、パイプからソケットに切り替える必要があるようです。

8

JNAライブラリを使用して名前付きパイプを作成できます https://github.com/Java-native-access/jna

次のテストで明確に示されています: https://github.com/Java-native-access/jna/blob/master/contrib/platform/test/com/Sun/jna/ platform/win32/Kernel32NamedPipeTest.Java

JNAラッパーのAPIはWin32と同じであるため、Windowsで名前付きパイプのすべての機能と機能を使用できます。

4
jreznot

Javaでは、既存の名前付きパイプを読み書きすることが非常に可能です。私の知る限り、Windows環境で名前付きパイプを作成することはできません。 Linuxは、ファイルのように名前付きパイプを作成して使用できるため、別の話です。

既存のパイプとの相互作用に関する関連リンク: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

1
shellster

おそらく、すべてのプロセスがcygwinである場合、cygwin名前付きパイプを使用できます。

0
rogerdpack