Domanda

Sul nostro sistema Linux utilizziamo named pipe per la comunicazione tra processi (un produttore e un consumatore).

Per testare il codice del consumatore (Java), vorrei implementare (in Java) un produttore fittizio che scrive su una pipe denominata che è collegata al consumatore.

Ora il test dovrebbe funzionare anche nell'ambiente di sviluppo di Windows. Quindi vorrei sapere come creare una pipe con nome in Windows da Java. In Linux posso usare mkfifo (chiamato usando Runtime.exec () ), ma come dovrei farlo su Windows?

È stato utile?

Soluzione

Usa pipe denominate per comunicare tra Processi Java e .Net

Parte rilevante nel collegamento

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();
}

Altri suggerimenti

In Windows, esistono pipe con nome ma essi non possono essere creati come file in un filesystem scrivibile e non esiste uno strumento da riga di comando. Vivono in un file system speciale e possono essere creati solo utilizzando l'API Win32.

Sembra che dovrai ricorrere al codice nativo o passare da pipe a socket per IPC - probabilmente la migliore soluzione a lungo termine, dal momento che è molto più portatile.

È possibile creare una pipe denominata utilizzando la libreria JNA https://github.com/java-native -access / jna

Viene mostrato chiaramente nel seguente test: https://github.com/java-native-access/jna/blob/master/contrib/platform/test/com/sun/jna/platform/win32/ Kernel32NamedPipeTest.java

L'API del wrapper JNA è uguale a Win32, quindi sarai in grado di utilizzare tutte le funzionalità e la potenza delle named pipe su Windows.

È molto possibile leggere e scrivere in una esistente pipe in Java. Per quanto ne so, non è possibile creare una pipe denominata in un ambiente Windows. Linux è una storia diversa in quanto le pipe denominate possono essere create e consumate come file.

Link rilevante sull'interazione con una pipe esistente: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

forse potresti usare le pipe denominate cygwin - se tutti i tuoi processi sono cygwin.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top