2015-07-15 3 views
1

Я создаю именованный канал в 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); 

Труба создается, и это хорошо. Я также попытался удалить трубу в менее родной Java способ, с помощью exec:

final String [] rmfifo = { "/bin/rm ~/myFifo" }; 

Runtime.getRuntime().exec(rmfifo); 

Ни один из них не похоже на работу. Есть идеи?

Спасибо, erip

+0

Можете ли вы показать ошибку, которая бросается? – Strikeskids

+0

'java.nio.file.NoSuchFileException: ~/myFifo' – erip

ответ

3

Проблема заключается в ~/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 переводит ~/.

+1

Это сработало. Выполнение некоторых других проблем, но это не связано. Большое спасибо! – erip

Смежные вопросы