Чи / dev / {udp, tcp} стандартизовані чи доступні скрізь?


17

Я нещодавно дізнався про /dev/udpта /dev/tcpпсевдопристрої тут . Вони специфічні для деяких дистрибутивів GNU / Linux чи я можу їх знайти в інших системах Unix?

Чи вони стандартизовані якимось чином?

Поки що мені вдалося їх успішно використовувати в OS X, Arch Linux і CentOS.

Відповіді:


26

Це особливість оболонки, а не операційної системи.

Так, наприклад, на Solaris 10 з ksh88оболонкою:

% cat < /dev/tcp/localhost/22
ksh: /dev/tcp/localhost/22: cannot open

Однак якщо ми переходимо до bash:

% bash
bash-3.2$ cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_1.1.5

Так bashтрактує, /dev/tcpале ksh88 не зробив.

На Solaris 11 з ksh93оболонкою:

% cat < /dev/tcp/localhost/22
SSH-2.0-Sun_SSH_2.2

Тож ми можемо бачити, що це дуже залежить від оболонки, яка використовується.


4
Також залежить від варіантів часу компіляції - не у всіх версіях bash буде включено це.
Чарльз Даффі

@CharlesDuffy Досить правда; також стосується ksh (ksh-88 намагався автоматично виявити, але я не впевнений, що він працював належним чином).
Стівен Харріс

1
Щодо першого речення, POSIX стандартизує деякі основні функції оболонки (хоча /dev/tcp/...це не одна з них).
Tanz87

3

Щоб додати, з вузла Bash Info :

Bash обробляє кілька імен файлів спеціально, коли вони використовуються в перенаправленнях, як описано в наступній таблиці. Якщо операційна система, на якій працює Bash, надає ці спеціальні файли, bash використовуватиме їх; інакше це буде імітувати їх внутрішньо поведінкою, описаною нижче.

'/ dev / fd / FD' Якщо FD є дійсним цілим числом, дескриптор файлу FD дублюється.

'/ dev / stdin' Дескриптор файлу 0 дублюється.

'/ dev / stdout' Дескриптор 1 файлу дублюється.

'/ dev / stderr' Дескриптор файлу 2 дублюється.

'/ dev / tcp / HOST / PORT' Якщо HOST є дійсним іменем хоста або адресою Інтернету, а PORT - цілим номером порту або іменем послуги, Bash намагається відкрити відповідний TCP-розетку.

'/ dev / udp / HOST / PORT' Якщо HOST є дійсним іменем хоста або адресою Інтернету, а PORT - цілим номером порту або іменем послуги, Bash намагається відкрити відповідний сокет UDP.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.