无法从Java中删除命名管道
我正在用Java创建一个命名管道,该管道使用以下代码:无法从Java中删除命名管道,java,named-pipes,nosuchfileexception,Java,Named Pipes,Nosuchfileexception,我正在用Java创建一个命名管道,该管道使用以下代码: final String [] mkfifo = {"/bin/sh", "-c", "mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"}; Process p = Runtime.getRuntime().exec(mkfifo); 但是现在,当我尝试用以下代码删除它时,我得到了一个NoSuchFileException: Path fifoPath = Paths.get("
final String [] mkfifo = {"/bin/sh", "-c", "mkfifo ~/myFifo && tail -f ~/myFifo | csh -s"};
Process p = Runtime.getRuntime().exec(mkfifo);
但是现在,当我尝试用以下代码删除它时,我得到了一个NoSuchFileException
:
Path fifoPath = Paths.get("~/myFifo");
try {
Files.delete(fifoPath);
} catch (Exception e) {
System.err.println(e);
}
我已经验证了文件确实是通过在程序执行期间发出ls~
创建的,并且在抛出异常并结束程序执行后,~/myFifo
仍然保留
我假设…&&tail…
在某种程度上阻塞的情况下可能会导致一些问题,因此我更改为使用以下命令创建命名管道:
final String [] mkfifo = {"/bin/sh", "-c", "mkfifo ~/myFifo"};
Process p = Runtime.getRuntime().exec(mkfifo);
管道仍在创建中,这很好。我还尝试通过exec
,以一种不太自然的Java方式删除管道:
final String [] rmfifo = { "/bin/rm ~/myFifo" };
Runtime.getRuntime().exec(rmfifo);
这些似乎都不起作用。有什么想法吗
谢谢,
erip问题在于
~/myFifo
Java不理解~
我运行了以下代码
Path fifoPath = Paths.get("/home/russell/myFifo");
try {
Files.delete(fifoPath);
} catch (Exception ex) {
System.err.println(ex);
}
它运行得非常完美
String home = System.getProperty("user.home");
Path fifoPath = Paths.get(home + "/myFifo");
try {
Files.delete(fifoPath);
} catch (Exception ex) {
System.err.println(ex);
}
上面的代码也适用于我的系统
~/
是一个shell
东西,所以java不会接受它
它实际创建文件的原因首先是因为您正在使用
/bin/sh
运行mkfifo
命令,并且sh
转换~/
您能显示抛出的错误吗?java.nio.file.NoSuchFileException:~/myFifo
这有效。遇到了其他一些问题,但这是无关的。非常感谢你!