/ Dev / {udp, tcp} sono standardizzati o disponibili ovunque?


17

Di recente ho imparato a conoscere gli /dev/udpe /dev/tcppseudo-dispositivi qui . Sono specifici per alcune distribuzioni GNU / Linux o posso trovarli su altri sistemi unix?

Sono standardizzati in qualche modo?

Finora sono stato in grado di usarli con successo su OS X, Arch Linux e CentOS.

Risposte:


26

Questa è una caratteristica della shell e non del sistema operativo.

Quindi, ad esempio, su Solaris 10 con ksh88come shell:

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

Tuttavia, se passiamo a bash:

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

Quindi bashinterpreta il /dev/tcpma ksh88 no.

Su Solaris 11 con ksh93come shell:

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

Quindi possiamo vedere che dipende molto dalla shell in uso.


4
Dipende anche dalle opzioni di compilazione: non tutte le build di bash lo avranno abilitato.
Charles Duffy,

@CharlesDuffy Abbastanza vero; vero anche per ksh (ksh-88 ha provato a rilevare automaticamente, ma non sono sicuro che abbia funzionato correttamente).
Stephen Harris,

1
Per quanto riguarda la prima frase, POSIX standardizza alcune funzioni di base della shell (sebbene /dev/tcp/...non sia una di queste).
Tanz87

3

Per aggiungere, dal nodo Informazioni Bash :

Bash gestisce diversi nomi di file specialmente quando vengono utilizzati nei reindirizzamenti, come descritto nella tabella seguente. Se il sistema operativo su cui è in esecuzione Bash fornisce questi file speciali, bash li utilizzerà; altrimenti li emulerà internamente con il comportamento descritto di seguito.

'/ dev / fd / FD' Se FD è un numero intero valido, il descrittore di file FD viene duplicato.

'/ dev / stdin' Il descrittore di file 0 è duplicato.

'/ dev / stdout' Il descrittore di file 1 è duplicato.

'/ dev / stderr' Il descrittore di file 2 è duplicato.

'/ dev / tcp / HOST / PORT' Se HOST è un nome host o indirizzo Internet valido e PORT è un numero di porta intero o un nome di servizio, Bash tenta di aprire il socket TCP corrispondente.

'/ dev / udp / HOST / PORT' Se HOST è un nome host o indirizzo Internet valido e PORT è un numero di porta intero o un nome di servizio, Bash tenta di aprire il socket UDP corrispondente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.