Мне нужно получить доступ к пронумерованным дескрипторам файлов из 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-подобной системе специальная файловая система, содержащая именованные записи для всех файловых дескрипторов, и если да, то где.
- I'm using FreeBSD where fdescfs(5) is a filesystem that does just this. Under Linux it would be 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, замените пути вашей операционной системы)