Question

Sur notre système Linux, nous utilisons des canaux nommés pour la communication interprocessus (un producteur et un consommateur).

Afin de tester le code du consommateur (Java), je voudrais implémenter (en Java) un producteur factice qui écrit dans un canal nommé qui est connecté au consommateur.

À présent, le test devrait également fonctionner dans l'environnement de développement Windows. Je voudrais donc savoir comment créer un tuyau nommé dans Windows à partir de Java. Sous Linux, je peux utiliser mkfifo (appelé avec Runtime.exec () ), mais comment dois-je faire cela sous Windows?

Était-ce utile?

La solution

Utiliser des tubes nommés pour communiquer entre eux Processus Java et .Net

Partie pertinente du lien

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

Autres conseils

Dans Windows, les tuyaux nommés existent , mais ils ne peuvent pas être créés sous forme de fichiers dans un système de fichiers inscriptible et il n'existe aucun outil de ligne de commande. Ils vivent dans un système de fichiers spécial et ne peuvent être créés qu’en utilisant l’API Win32.

Il semblerait que vous deviez avoir recours au code natif ou passer des tuyaux aux sockets pour IPC - probablement la meilleure solution à long terme, car elle est beaucoup plus portable.

Vous pouvez créer un canal nommé à l'aide de la bibliothèque JNA https://github.com/java-native -access / jna

Cela apparaît clairement dans le test suivant: https://github.com/java-native-access/jna/blob/master/contrib/platform/test/com/sun/jna/platform/win32/ Kernel32NamedPipeTest.java

L'API de l'encapsuleur JNA est identique à Win32. Vous pourrez donc utiliser toutes les fonctionnalités et la puissance des canaux nommés sous Windows.

Il est très possible de lire et d'écrire sur un canal nommé existant en Java. À ma connaissance, vous ne pouvez pas créer de canal nommé dans un environnement Windows. Linux est une histoire différente car les canaux nommés peuvent être créés et utilisés comme des fichiers.

Lien pertinent sur l'interaction avec un canal existant: http://v01ver-howto.blogspot.com/2010/04/howto-use-named-pipes-to-communicate.html

pourrait peut-être utiliser des canaux nommés cygwin - si tous vos processus sont cygwin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top