FileInputStream блокирует конструктор при открытии именованного канала - PullRequest
3 голосов
/ 20 июня 2011

Использование 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  

1 Ответ

1 голос
/ 21 августа 2011

Скопировано из комментариев:

Это похоже на правильное поведение. Что ты пытаешься сделать? - Бантар 20 июня в 7:42

Да, я думаю, что эта тема, возможно, только что ответила на мой вопрос: stackoverflow.com / questions / 2246862 /… - я пытаюсь читать из канала, я ожидал, что поток откроется блокировать при чтении (), а не блокировать при открытии потока. - Дэвид Паркс 20 июня в 7:52

...