Je sais que /dev/tcp/<host>/<port>
c'est un chemin magique géré spécifiquement par certains obus dans les redirections. Mais selon man bash
:
Si le système d'exploitation sur lequel bash s'exécute fournit ces fichiers spéciaux, bash les utilisera; sinon il les imitera en interne [...]
Sur la boîte Linux que j'utilise en ce moment, le /dev/tcp
fichier spécial n'est pas présent, donc le Bash va l' émuler . Mais, existe-t-il en fait un système de type Unix qui fournit au /dev/tcp
fichier spécial la même sémantique que celui pris en charge par Bash?
devices
tcp
character-special-files
Sylvain Leroux
la source
la source
/dev
est un tmpfs sur les linux actuels, et il était sur la partition racine dans les plus anciens. C'est pourquoi c'est impossible actuellement. Cela pourrait être rendu possible facilement avec une extension sysfs ou procfs (les deux f sont très flexibles et similaires (en fait, personne ne sait pourquoi ils ne sont pas les mêmes)), personne ne le fait aujourd'hui, mais cela pourrait être fait dans environ 100 lignes de code.Réponses:
Je pense que la documentation de Bash est quelque peu trompeuse sur ce sujet. En regardant le code, même en revenant à la version 2.04 où les redirections réseau ont été introduites,
/dev/tcp
et/dev/udp
fonctionne comme suit:configure
script vérifie si diverses fonctionnalités de mise en réseau sont prises en charge; si c'est le cas, si les redirections réseau sont activées (ce qui est le cas par défaut), le code de réseau interne est intégré;/dev/tcp
et/dev/udp
(au bon format) est géré en interne; sinon, un avertissement est généré («/ dev / (tcp | udp) / host / port non pris en charge sans réseau») et Bash tente d'ouvrir le chemin donné sur le système;Cela se résume à:
/dev/tcp
et/dev/udp
sera toujours gérée en interne;/dev/(tcp|udp)/host/port
, cela sera utilisé, sinon, selon toute probabilité, la redirection échouera;/dev/(tcp|udp)/host/port
, cela sera utilisé, sinon, selon toute probabilité, la redirection échouera./dev/tcp
existe sur certains systèmes, mais pour autant que je sache, aucun ne prend en charge la même abstraction que Bash. Sous Solaris,/dev/tcp
est utilisé avec l'ndd
outil pour interroger et modifier la configuration du réseau. Dans XTI (voir aussi Open Group si vous êtes membre), lat_open
fonction peut être utilisée avec/dev/tcp
pour ouvrir une connexion TCP, mais elle n'utilise pas de configuration basée sur le chemin, il existe une structure de données distincte pour spécifier l'hôte cible et port (et autres paramètres).la source