Linuxシステムでは、プロセス間通信(プロデューサーとコンシューマー)に名前付きパイプを使用します。
コンシューマー(Java)コードをテストするために、コンシューマーに接続されている名前付きパイプに書き込むダミープロデューサーを(Javaで)実装したいと思います。
これで、テストはWindows開発環境でも機能するはずです。したがって、JavaからWindowsで名前付きパイプを作成する方法を知りたいです。 Linuxではmkfifo(Runtime.exec()
を使用して呼び出されます)を使用できますが、Windowsではどうすればよいですか?
名前付きパイプを使用して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();
}
Windowsでは、 名前付きパイプが存在する ですが、それらは 書き込み可能なファイルシステムのファイルとして作成できません であり、コマンドラインツールはありません。それらは特別なファイルシステムにあり、Win32 APIを使用することによってのみ作成できます。
IPC-移植性がはるかに高いため、おそらく最良の長期的解決策として、ネイティブコードに頼るか、パイプからソケットに切り替える必要があるようです。
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で名前付きパイプのすべての機能と機能を使用できます。
Javaでは、既存の名前付きパイプを読み書きすることが非常に可能です。私の知る限り、Windows環境で名前付きパイプを作成することはできません。 Linuxは、ファイルのように名前付きパイプを作成して使用できるため、別の話です。
既存のパイプとの相互作用に関する関連リンク: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html
おそらく、すべてのプロセスがcygwinである場合、cygwin名前付きパイプを使用できます。