首页 / JAVA / 在Java中创建命名管道
在Java中创建命名管道
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了在Java中创建命名管道,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1872字,纯文字阅读大概需要3分钟。
内容图文
![在Java中创建命名管道](/upload/InfoBanner/zyjiaocheng/745/fa54637281a84ba5b0ea60d4c004f8ae.jpg)
我正在尝试使用Java创建命名管道.我正在使用Linux.但是,我遇到了写入管道的问题.
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行没有.
但是,如果我在外部shell上运行“cat fifo”,则程序继续执行并将所有内容写入而不会挂起.奇怪的是这个程序启动的cat子进程是如何工作的.
编辑:我在子进程上做了一个ps,它的状态为“S”.
解决方法:
外部流程具有您需要处理的输入和输出.否则,它们可能会挂起,但它们挂起的确切位置会有所不同.
解决问题的最简单方法是更改??每次出现的问题:
process = Runtime.getRuntime().exec(command);
对此:
process = new ProcessBuilder(command).inheritIO().start();
Runtime.exec已过时.请改用ProcessBuilder.
更新:
inheritIO() is shorthand用于将Process的所有输入和输出重定向到父Java进程的输入和输出.您可以改为仅重定向输入,并自己读取输出:
process = new ProcessBuilder(command).redirectInput(
ProcessBuilder.Redirect.INHERIT).start();
然后,您需要从process.getInputStream()中读取进程的输出.
内容总结
以上是互联网集市为您收集整理的在Java中创建命名管道全部内容,希望文章能够帮你解决在Java中创建命名管道所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。