Мне нужно получить доступ к дескрипторам нумерованных файлов из Java - кроме 0, 1 или 2.
Как это можно сделать? Я просмотрел класс FileDescriptor
, но не нашел способа инициализировать его с заданным номером дескриптора файла.
В качестве конкретного примера можно предположить, что Java вызывается как дочерний процесс с другого языка программирования. Файловые дескрипторы 3 и 4 предоставляются другим языком для ввода и вывода.
В Java мне нужны объекты InputStream
и OutputStream
, связанные с этими файловыми дескрипторами, так же как System.in, System.out и System.error связаны с файловыми дескрипторами 0, 1 и 2.
Я использую Java 1.6, и это должно работать на Unix-подобных системах.
Протестированное рабочее решение:
Ответ на записи файловой дескрипторной специальной файловой системы показал мне следующее работоспособное решение:
-
узнать, если и где ваша система Unix имеет специальную файловую систему, содержащую именованные записи для всех дескрипторов файлов.
- Я использую FreeBSD, где fdescfs (5) - это файловая система, которая делает именно это. В Linux это будет procfs.
-
убедитесь, что эта файловая система установлена
-
FreeBSD: поместите
fdescfs /dev/fd fdescfs rw 0 0
в/etc/fstab
или запустите
mount -t fdescfs null /dev/fd
в командной строке (возможно, с помощью sudo)
-
-
Используйте новые
FileInputStream("/dev/fd/3")
иnew FileOutputStream("/dev/fd/4")
, чтобы получить потоки, подключенные к файловым дескрипторам (пути для FreeBSD, заменить на пути к вашей операционной системе)