在我们的Linux系统上,我们使用命名管道进行进程间通信(生产者和消费者)。
为了测试消费者(Java)代码,我想(用Java)实现一个虚拟生产者,它向连接到消费者的命名管道写入数据。
现在,测试应该还可以在Windows开发环境中工作。因此,我想知道如何在Windows中从Java创建命名管道。在Linux中我可以使用mkfifo (称为使用Runtime.exec()
),但在Windows上该如何操作呢?
发布于 2010-04-09 16:04:08
Use Named Pipes to Communicate Between Java and .Net Processes
链接中的相关部分
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();
}
发布于 2009-03-11 13:55:35
在windows中,named pipes exist,但是它们是cannot be created as files in a writeable filesystem,并且没有命令行工具。它们位于一个特殊的文件系统中,并且只能使用Win32应用编程接口创建。
看起来你将不得不求助于原生代码,或者为IPC从管道转换为套接字-这可能是最好的长期解决方案,因为它更容易移植。
发布于 2018-01-08 19:14:50
可以使用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 wrapper的API与Win32相同,因此您将能够在Windows上使用命名管道的所有功能和功能。
https://stackoverflow.com/questions/634564
复制相似问题