打开命名管道时,构造函数上的 FileInputStream 块
Posted
技术标签:
【中文标题】打开命名管道时,构造函数上的 FileInputStream 块【英文标题】:FileInputStream blocks on the constructor when opening a named pipe 【发布时间】:2011-06-20 07:35:46 【问题描述】:使用 Fedora 12:mkfifo pipe
创建管道。
当我使用以下代码尝试针对命名管道打开输入流时,它会阻塞在 FileInputStream 构造函数上,除非我为管道创建写入器,例如打开另一个终端并运行:
tee pipe
public static void main(String[] args)
try
File pipe = new File("/tmp/pipes_debugging/pipeToJava");
System.out.println( pipe.canRead() );
FileInputStream fis = new FileInputStream(pipe);
System.out.println("exiting.");
catch (Exception e)
e.printStackTrace();
输出:
true
<blocks - thread trace shown below>
Thread [main] (Suspended)
FileInputStream.open(String) line: not available [native method]
FileInputStream.<init>(File) line: 137
PipesDebugging.main(String[]) line: 12
【问题讨论】:
这似乎是一个正确的行为。你想做什么? 是的,我认为这个线程可能刚刚回答了我的问题:***.com/questions/2246862/… - 我正在尝试从管道中读取,我希望流在 read() 上打开并阻塞,而不是阻止打开流。 【参考方案1】:从 cmets 复制:
这似乎是一个正确的行为。你想做什么? – 班塔尔 6 月 20 日 7:42
是的,我认为这个线程可能刚刚回答了我的问题:***.com/questions/2246862/… - 我正在尝试从管道中读取,我希望流在 read() 上打开并阻塞,而不是在打开流时阻塞. ——大卫·帕克斯 6 月 20 日 7:52
【讨论】:
以上是关于打开命名管道时,构造函数上的 FileInputStream 块的主要内容,如果未能解决你的问题,请参考以下文章