java nio и конец потока для stdin, stdout, stderr
У меня есть программа A, которая получает стандартный вывод другой программы B в ByteBuffer через Pipe.SourceChannel.
Программа будет читать из ByteBuffer для stdout, пока не достигнет конца потока (то есть пока readte () ByteBuffer не вернет -1).
Может ли стандартный вывод программы B открываться и закрываться несколько раз при выполнении программы? То есть возможно ли, что read() возвращает -1, но более поздняя программа B имеет дополнительный стандартный вывод, и в этом случае программа A должна выполнить еще одно чтение () ByteBuffer?
Заранее спасибо.
2 ответа
В Linux вы можете использовать NIO для stdin, stdout и stderr, потому что они привязаны к определенным символьным устройствам, к которым можно обращаться как к файлам. Для этого вы можете открыть /proc/self/fd/0
, 1
или же 2
соответственно. Это не работает для всех типов потоков или в не-Unix системах, но это может быть вариантом.
После того, как поток закрыт, его невозможно открыть, если только он не был файлом и вы не смогли получить имя файла.
Нет, это невозможно. stdout, stderr и stdin - это "специальные" потоки. Вы не можете закрыть их и открыть их позже.