打开命名管道时,构造函数上的 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 块的主要内容,如果未能解决你的问题,请参考以下文章

网络上的命名管道

命名管道卡在打开状态

Docker Windows 容器挂载命名管道

使用 read() 函数时检查 EOF

具有多个读取器的 Unix 上的命名管道 (FIFO)

IPC - 命名管道(fifo)- 使用