3
我正在嘗試使用Java創建命名管道。我正在使用Linux。但是,我遇到了寫入管道的問題。在Java中創建命名管道
File fifo = fifoCreator.createFifoPipe("fifo");
String[] command = new String[] {"cat", fifo.getAbsolutePath()};
process = Runtime.getRuntime().exec(command);
FileWriter fw = new FileWriter(fifo.getAbsoluteFile());
BufferedWriter bw = new BufferedWriter(fw);
bw.write(boxString); //hangs here
bw.close();
process.waitFor();
fifoCreator.removeFifoPipe(fifo.toString());
fifoCreator:
@Override
public File createFifoPipe(String fifoName) throws IOException, InterruptedException {
Path fifoPath = propertiesManager.getTmpFilePath(fifoName);
Process process = null;
String[] command = new String[] {"mkfifo", fifoPath.toString()};
process = Runtime.getRuntime().exec(command);
process.waitFor();
return new File(fifoPath.toString());
}
@Override
public File getFifoPipe(String fifoName) {
Path fifoPath = propertiesManager.getTmpFilePath(fifoName);
return new File(fifoPath.toString());
}
@Override
public void removeFifoPipe(String fifoName) throws IOException {
Files.delete(propertiesManager.getTmpFilePath(fifoName));
}
我寫的是由1000行的字符串。寫100行工作,但1000行不行。
但是,如果我在外殼上運行「cat fifo」,那麼程序就會繼續執行,並且不會掛起。奇怪的是,這個程序啓動的cat子進程無法工作。
編輯:我在子進程上做了一個ps,它有狀態「S」。
This Works。但是,如何獲得流程的輸出?在此之前,我使用了process.getInputStream()。 – mrQWERTY
如果您知道您將通過process.getInputStream()讀取輸出,您可以選擇僅重定向進程的輸入。相應地更新答案。 – VGR