无法从 Java 中删除命名管道
Cannot delete a named pipe from Java
我正在 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("~/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);
None 其中似乎有效。有什么想法吗?
谢谢,
埃里普
问题是~/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
t运行列出 ~/
.
我正在 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("~/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
:
final String [] rmfifo = { "/bin/rm ~/myFifo" };
Runtime.getRuntime().exec(rmfifo);
None 其中似乎有效。有什么想法吗?
谢谢, 埃里普
问题是~/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
t运行列出 ~/
.