Tout au long de la spécification POSIX, il est prévu ( 1 , 2 , ...) pour permettre aux implémentations de traiter un chemin commençant par deux /
spécialement.
Une application POSIX (une application écrite dans la spécification POSIX pour être portable sur tous les systèmes compatibles POSIX) ne peut pas supposer que //foo/bar
est le même que /foo/bar
(bien qu'ils puissent supposer que ///foo/bar
est le même que /foo/bar
).
Maintenant, quels sont ces systèmes POSIX (historiques et toujours maintenus) qui traitent //foo
spécialement? Je croyais (j'ai maintenant je me suis trompé ) que la disposition POSIX a été poussée par Microsoft pour leur variante Unix (XENIX) et peut-être la couche Windows POSIX (quelqu'un peut-il confirmer cela?).
Il est utilisé par Cygwin qui est également une couche de type POSIX pour Microsoft Windows. Existe-t-il des systèmes non Microsoft Windows? OpenVMS?
Sur les systèmes où //foo/bar
est spécial, à quoi sert-il? //Host/path
pour l'accès aux systèmes de fichiers réseau? Systèmes de fichiers virtuels?
Faites quelques applications fonctionnant sur des likes Unix - si ce n'est l'API du système - traitez //foo/bar
les chemins spécialement (dans des contextes où ils traitent autrement /foo/bar
comme chemin sur le système de fichiers)?
Edit , j'ai depuis posé une question sur la liste de diffusion austin-group sur l'origine de //foo/bar
la manipulation dans la spécification, et la discussion est une lecture intéressante (du moins du point de vue archéologique).
Ceci est une compilation et un index des réponses données jusqu'à présent. Ce message est wiki communautaire, il peut être édité par quiconque a plus de 100 points de réputation et personne n'en tire la réputation. N'hésitez pas à poster votre propre réponse et à y ajouter un lien ici (ou attendez que je le fasse). Idéalement, cette réponse ne devrait être qu'un résumé (avec des entrées courtes tandis que les autres réponses individuelles auraient les détails).
//Host/file
chemins de partage de fichiers réseau.//pathname
demandes aux jeux de données MVS, pas aux fichiers réseau. Exemple .@ BinaryZebra Domaine/OS Apollo (confirmé). Également mentionné à Description officielle UNC (Universal Naming Convention) comme possible Origine de //Host/path
notations ( voir aussi , page 2-15).
Selon Donn Terry , c'est HP (qui a acquis Apollo Computers) qui a poussé à l'inclusion de cette disposition dans la spécification POSIX pour Domain/OS.
@ jillagre Tektronix Utek ( corroboré ), où //Host/path
est un chemin sur un système de fichiers distribué.
//123/path
est un /path
sur le noeud 123. (Mentionné dans la documentation QNX 6 .)//Host/path
in (interrompu dans SVR4) RFS Remote File Sharing système.//Host/path
.//foo/bar
spécialement pour les chemins//depot/A/B/C/D
fait référence à un chemin dans un dépôt.//
préfixe pour chemins relatifs (au mélange associé au bloc de données) .Est-ce que certaines applications fonctionnant sur Unix-like - si ce n'est l'API du système - traitent // foo/bar Paths spécialement?
Je connais Perforce qui utilise //depot/A/B/C/D
Chemins pour se référer au dépôt. Perforce prend également en charge //Client/C/D
Chemins, lorsque le client pointe vers //depot/A/B/
. Ici, le FileSystem local peut ne pas avoir ces chemins.
p4 filelog //depot/A/B/C/D
affichera l'historique de ce fichier, même s'il n'y a pas de fichier /depot/A/B/C/D
.
p4 filelog C/D
affichera également l'historique de ce fichier, s'il est exécuté à partir du répertoire approprié.
Référence: https://www.perforce.com/perforce/r12.1/manuals/cmdref/o.fspecs.html
Il y a plusieurs décennies, Tektronix Utek (Unix basé sur BSD 4.2, d'abord sur National Semiconductors 2016 CPU puis Motorola 6802 s) fournissait quelque chose appelé DFS ( système de fichiers distribué) sous lequel //foo/bar
faisait référence au /bar
fichier sur le serveur foo
dfs. Il a ensuite été obsolète par le NFS de Sun.
Malheureusement, je n'ai pas encore fait référence à cela, mais je pourrais éventuellement trouver de la documentation Utek dans ma cave et mettre à jour cette réponse.
Suivre l'exemple à partir de cette réponse . Et en lisant la page 2-15 de le manuel de Bitsavers (merci @ grawity).
Données partagées
Le deuxième principe de conception du système de fichiers distribué Domain/OS, le partage par défaut, implique un espace de nom uniforme global. L'espace de noms du système de fichiers distribué apparaît aux utilisateurs comme celui d'un système de fichiers géant à temps partagé. Il s'agit d'un espace de noms hiérarchique UNIX traditionnel, sauf que les chemins absolus peuvent commencer par le nom de la racine du réseau (appelé //). Il est également possible d'exprimer des chemins d'accès par rapport à la racine du nœud local (le répertoire /).
Il y a aussi n ancien manuel de avec une "Première impression: juillet 1985". À la page 1-4:
Les doubles barres obliques (//) de la figure 1-2 représentent le niveau supérieur de l'arborescence de nommage, le répertoire racine du réseau.
Nous avons donc la confirmation que le domaine/système d'exploitation d'Apollo a utilisé //
pour la racine du réseau.
Le projet ReactOS - qui est une implémentation gratuite et open-source du noyau NT et des API associées - s'est apparemment engagé à implémenter également son propre Interix - comme le sous-système POSIX (bien que le sous-système OS/2 d'origine de MS soit également mentionné dans le contexte , aucune mention n'est faite d'un analogue de ReactOS).
Bien que les efforts aient été jusqu'ici small , fork()
est apparemment une réalité. Voici un extrait de la page du projet du sous-système, comme indiqué sous problèmes ouverts:
chemins
Quelle est la meilleure façon d'utiliser les chemins Win32 dans les applications POSIX? idées:
traduire
//<device>/<path
> dans\\.\<device>\<path>
(avec un cas spécial pour les lettres de lecteur -//<letter>/<path>
=><letter>:\<path>
- et l'évasion spéciale//./<raw text>
=>\\.\<raw text>
. Les chemins UNC peuvent être spécifiés avec//unc/<path>
).//
les chemins sont réservés par la norme pour un comportement spécifique à l'implémentation, et le//<letter>/
la syntaxe pour échapper aux chemins Win32 est largement utilisée dans les environnements de compatibilité POSIX existantsheuristique pour reconnaître les chemins Win32 "nus" en tant que tels
recherche insensible à la casse pour les chemins Win32 et
//
chemins (la norme autorise-t-elle ce type de comportement spécifique à l'implémentation pour//
chemins?).
Je ne sais pas comment cela se qualifie car je ne sais pas combien de cela a été mis en œuvre, mais je pensais que c'était une description utile et intéressante du problème.
Une autre application: Blender traite un leader //
comme référence au répertoire du projet (le répertoire dans lequel le .blend
le fichier est enregistré). Voici la page de manuel appropriée .
Cela est également vrai pour les systèmes d'exploitation non similaires à Unix (c'est-à-dire Windows).
J'ai un vague souvenir que le //Host/path
la notation a été utilisée sur AT&T SysV.3 dans le cadre de son implémentation RFS Remote File Sharing . Cela a finalement été abandonné au moment de la sortie de SysV.4 en faveur du plus simple mais plus populaire NFS de Sun Microsystems.
Cependant, je ne trouve aucune référence concrète à la syntaxe, et la documentation que j'ai revue tout à l'heure semble indiquer que l'idée que l'utilisateur spécifie explicitement un nom d'hôte distant aurait été opposée au principe de conception de l'indépendance de l'emplacement.
Références 1. RFS Architectural overview
Dans les années 80, SEL/Gould avait un système d'exploitation Unix appelé UTX-32 dans lequel //Host/path
était équivalent à /net/Host/path
dans Solaris; c'est-à-dire, chemin d'accès à distance path
sur l'hôte Host
. Je ne trouve aucune documentation à ce sujet, donc je ne sais pas s'il s'agissait de RFS ou d'une évolution parallèle (ou si AT&T a volé acquis de Gould).
POSIX indique dans le Justification pour la résolution de chemin A.4.12 Paragraphes 9 et 10:
Dans certains systèmes en réseau, la construction /../hostname/ est utilisée pour faire référence au répertoire racine d'un autre hôte, et POSIX.1 autorise ce comportement.
D'autres systèmes en réseau utilisent la construction // hostname dans le même but; c'est-à-dire qu'une double barre oblique initiale est utilisée.
Cela semble confirmer que //
signifie "racine du réseau", ou du moins c'était l'idée lorsque la règle a été incluse dans POSIX.
Les règles suivent pour supprimer toute signification de //
au milieu d'un chemin pour un /
a commencé Pathname:
... puisque les séquences non principales de deux caractères <slash> ou plus
sont traités comme une seule <barre oblique>, ...
Bien sûr, un //
a commencé Pathname peut étendre ou modifier l'utilisation de //
à l'intérieur d'un chemin d'accès (pas au début). POSIX.1 le permet. Ce dernier confirme que le seul //
autorisé sont au début d'un chemin d'accès.