시스템의 다양한 프로세스 프로세스 공간에서 실행되는 DLL이 Java 프로세스와 다시 대화해야하는 JNI 코드를 작성 중입니다. 나는 다양한 mem/sockets/rpc 등 공유 무게 후 명명 된 파이프를 사용하기로 결정했습니다. 내 질문은 Java에서 명명 된 파이프를 처리하는 좋은 방법이 있습니까? 아니면 하나를 써야합니까?Java에서 명명 된 파이프를 처리하는 크로스 플랫폼 방식이 있습니까? 아니면 직접 작성해야합니까?
0
A
답변
1
유닉스에서 실행 중이라고 가정하면, exec로 파이프를 생성 한 다음 File * Stream으로 읽고 쓸 수는 없습니까?
@Test public void pipe() throws IOException, InterruptedException {
Runtime.getRuntime().exec("mkfifo mypipe");
final String[] read = new String[1];
Thread t = new Thread() {
@Override
public void run() {
try {
BufferedReader r = new BufferedReader(new FileReader("mypipe"));
read[0] = r.readLine();
} catch (IOException e) {
}
}
};
t.start();
FileWriter w = new FileWriter("mypipe");
w.write("hello\n");
w.flush();
t.join();
assertEquals("hello", read[0]);
}
0
나는 프로세스의 입력 및 출력 스트림을 통해 프로세스 통신을 수행하는 데 사용됩니다.
Process p = Runtime.getRuntime().exec("myproc");
OutputStream is = p.getOutputStream();
BufferedOutputStream bis = new BufferedOutputStream(is);
bis.write("your_command");
마찬가지로 입력 스트림을 사용하여 다른 프로세스에서 말하는 내용을 읽을 수 있습니다.
현재 저는이 두 가지를 모두 지원 한 이후에 곧 리눅스로 확장 할 계획입니다. 이것은 내가 끝내는 것일 수도 있지만 모든 플랫폼에서 대칭 적으로 작동하는 일반적인 API를 찾기를 희망했습니다. 하나도 없다면 아마 위와 비슷한 것을하는 글을 쓸 것이다. – Benj
win32 API에 액세스하려면 jna를 확인하십시오. –