2009-11-03 6 views
0

시스템의 다양한 프로세스 프로세스 공간에서 실행되는 DLL이 Java 프로세스와 다시 대화해야하는 JNI 코드를 작성 중입니다. 나는 다양한 mem/sockets/rpc 등 공유 무게 후 명명 된 파이프를 사용하기로 결정했습니다. 내 질문은 Java에서 명명 된 파이프를 처리하는 좋은 방법이 있습니까? 아니면 하나를 써야합니까?Java에서 명명 된 파이프를 처리하는 크로스 플랫폼 방식이 있습니까? 아니면 직접 작성해야합니까?

답변

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

현재 저는이 두 가지를 모두 지원 한 이후에 곧 리눅스로 확장 할 계획입니다. 이것은 내가 끝내는 것일 수도 있지만 모든 플랫폼에서 대칭 적으로 작동하는 일반적인 API를 찾기를 희망했습니다. 하나도 없다면 아마 위와 비슷한 것을하는 글을 쓸 것이다. – Benj

+0

win32 API에 액세스하려면 jna를 확인하십시오. –

0

나는 프로세스의 입력 및 출력 스트림을 통해 프로세스 통신을 수행하는 데 사용됩니다.

Process p = Runtime.getRuntime().exec("myproc"); 
OutputStream is = p.getOutputStream(); 
BufferedOutputStream bis = new BufferedOutputStream(is); 
bis.write("your_command"); 

마찬가지로 입력 스트림을 사용하여 다른 프로세스에서 말하는 내용을 읽을 수 있습니다.