Je vois POSIX mentionné souvent et partout, et je l'avais supposé être la norme UNIX de base .. jusqu'à ce que je remarque l'extrait suivant sur une page Wikipedia: The Open Group =
L'Open Group est le plus célèbre en tant qu'organisme de certification pour la marque UNIX et sa publication de la norme technique Single UNIX Specification, qui étend les normes POSIX et est la définition officielle d'un système UNIX.
Si la définition officielle d'un système UNIX est une extension de POSIX, que signifie exactement POSIX? , Cela semble sûrement être une pierre de touche du monde UNIX, mais je ne sais pas comment il s'intègre dans l'image globale.
POSIX a d'abord été une norme en 1988 bien avant la spécification UNIX unique. C'était l'une des tentatives d'unification de toutes les différentes fourches UNIX et systèmes de type UNIX. POSIX est une norme IEEE, mais comme l'IEEE ne possède pas la marque UNIX®, la norme n'est pas UNIX® bien qu'elle soit basée sur l'API UNIX existante à l'époque. La première norme POSIX.1 est officiellement connue sous le nom IEEE std 1003.1-1988. [ 1 ] L'IEEE a facturé des frais substantiels pour obtenir une copie de la norme.
L'Open Group a publié la spécification UNIX unique (SUSv2) en 1997 sur la base des travaux de l'IEEE sur la norme POSIX. SUSv3 est sorti en 2001 d'un groupe de travail conjoint entre l'IEEE et The Open Group connu sous le nom de Austin Group. SUSv3 est également connu sous le nom de POSIX: 2001 [ 2 ]. Il existe désormais également POSIX: 2004 et POSIX: 2008 qui sont au cœur de SUSv4. Quant à ce qu'est UNIX®, UNIX® est ce que le titulaire actuel de la marque déposée le dit. Depuis 1994, c'est The Open Group.
Novell a acquis l'activité de systèmes UNIX® d'AT & T/USL, où est né UNIX®. En 1994, ils ont vendu le droit à la marque UNIX® à X/Open [] maintenant connu sous le nom de The Open Group. Ils ont ensuite vendu le code source UNIX® à SCO en tant qu'UNIXWARE®. [] UNIX® lui-même a bifurqué plusieurs fois [ 4 ] [ 5 ] en partie à cause du modèle de licence d'AT & T. L'achat d'UNIX® vous a donné la source complète du système d'exploitation et la chaîne d'outils complète pour le construire. Les modifications de la source peuvent être distribuées et utilisées par n'importe qui qui détenait une licence UNIX® d'AT & T. La redevance était de plusieurs milliers.
BSD était un projet à Berkeley qui a ajouté un certain nombre d'améliorations au système d'exploitation UNIX®. Le code BSD a été publié sous une licence beaucoup plus libérale que la source d'AT & T et ne nécessitait pas de frais de licence ni même d'exigence pour être distribué avec la source, contrairement à la GPL que le GNU Project et Linux utilisent. Cela a fait qu'une bonne partie du code BSD a été inclus avec diverses fourches UNIX commerciales. Vers 4.3BSD, ils avaient presque remplacé tout besoin pour le code source AT&T UNIX® original. FreeBSD/NetBSD/OpenBSD sont tous des fourches de 4.3BSD qui sont un système d'exploitation complet et qui n'ont pas le code source AT&T d'origine. Ils n'ont pas non plus droit à la marque UNIX®, mais une grande partie de leur code est utilisé par les systèmes d'exploitation UNIX commerciaux. L'API Socket utilisée sur UNIX a été développée sur BSD et le code Unix Fast Filesystem a été emprunté et utilisé sur divers systèmes d'exploitation UNIX comme Solaris avec leurs propres améliorations.
Linux a été développé en 1991, mais a été développé à partir de zéro contrairement à BSD et utilise le projet GNU existant qui est une implémentation en salle blanche d'une grande partie de l'espace utilisateur UNIX. Il implémente une grande partie de POSIX pour est compatible avec UNIX, mais il n'a pas la connexion étroite avec AT&T ou UNIX® que les BSD ont.
Les choses les plus importantes POSIX 7 définit
Très bien étend ANSI C avec des choses comme:
mkdir
, dirname
, symlink
, readlink
, link
(liens durs), poll()
, stat
, sync
, nftw()
fork
, execl
, wait
, pipe
, sémaphores sem_*
, mémoire partagée (shm_*
), kill
, paramètres de planification (Nice
, sched_*
), sleep
, mkfifo
, setpgid()
socket()
mmap
, mlock
, mprotect
, madvise
, brk()
reg*
)Ces API déterminent également les concepts de système sous-jacents dont elles dépendent, par exemple fork
nécessite un concept de processus.
De nombreux appels système Linux existent pour implémenter une fonction API POSIX C spécifique et rendre Linux conforme, par ex. sys_write
, sys_read
, ... Beaucoup de ces appels système ont également des extensions spécifiques à Linux.
Implémentation de bureau Linux majeure: glibc, qui dans de nombreux cas fournit simplement un wrapper peu profond aux appels système.
Par exemple: cd
, ls
, echo
, ...
De nombreux utilitaires sont des frontaux directs de Shell pour une fonction API C correspondante, par exemple mkdir
.
Implémentation de bureau Linux majeure: GNU Coreutils pour les petits, séparés GNU projets pour les grands: sed
, grep
, awk
, ... Certains utilitaires CLI sont implémentés par Bash comme intégrés .
Par exemple, a=b; echo "$a"
Implémentation de bureau Linux principale: GNU Bash .
Par exemple: HOME
, PATH
.
PATH
la sémantique de recherche est spécifiée , y compris comment les barres obliques empêchent PATH
la recherche .
ANSI C indique 0
Ou EXIT_SUCCESS
Pour le succès, EXIT_FAILURE
Pour l'échec et laisse l'implémentation du reste définie.
POSIX ajoute:
126
: Commande trouvée mais non exécutable.
127
: Commande introuvable.
> 128
: Terminé par un signal.
Mais POSIX ne semble pas spécifier la règle 128 + SIGNAL_ID
Utilisée par Bash: Code de sortie par défaut à la fin du processus?
Il existe deux types: BRE (de base) et ERE (étendu). Basic est obsolète et uniquement conservé pour ne pas casser les API.
Celles-ci sont implémentées par les fonctions de l'API C et utilisées dans tous les utilitaires CLI, par exemple grep
accepte les BRE par défaut et les ERE avec -E
.
Par exemple: echo 'a.1' | grep -E 'a.[[:digit:]]'
Implémentation Linux majeure: la glibc implémente les fonctions sous regex.h que des programmes comme grep
peuvent utiliser comme backend.
Par exemple: /dev/null
, /tmp
Linux FHS étend considérablement POSIX.
/
Est le séparateur de cheminNUL
ne peut pas être utilisé.
Est cwd
, ..
Parenta-zA-Z0-9._-
Voir aussi: https://stackoverflow.com/questions/18550253/what-is-posix-compliance-for-filesystem
Conventions de l'API de l'utilitaire de ligne de commande
Pas obligatoire, utilisé par POSIX, mais presque nulle part ailleurs, notamment pas dans GNU. Mais c'est vrai, c'est trop restrictif, par exemple drapeaux à une seule lettre (par exemple -a
), pas de versions longues à double trait d'union (par exemple --all
).
Quelques conventions largement utilisées:
-
Signifie stdin où un fichier est attendu--
Termine les indicateurs, par exemple ls -- -l
Pour répertorier un répertoire nommé -l
"ACL POSIX" (listes de contrôle d'accès), par ex. utilisé comme backend pour setfacl
.
Ceci a été retiré mais il a été implémenté dans plusieurs OS, y compris sous Linux avec setxattr
.
Qui se conforme à POSIX?
De nombreux systèmes suivent POSIX de près, mais peu sont en fait certifiés par l'Open Group qui maintient la norme. Les certifiés notables comprennent:
La plupart des distributions Linux sont très conformes, mais non certifiées car elles ne veulent pas payer le contrôle de conformité. K-UX d'Inspur et EulerOS de Huawei sont deux exemples certifiés.
La liste officielle des systèmes certifiés se trouve sur: https://www.opengroup.org/openbrand/register/ et également sur page wiki .
Windows
Windows a implémenté POSIX sur certaines de ses distributions professionnelles.
Comme il s'agissait d'une fonctionnalité facultative, les programmeurs ne pouvaient pas compter sur elle pour la plupart des applications d'utilisateur final.
La prise en charge a été déconseillée dans Windows 8:
En 2016, une nouvelle API de type Linux officielle appelée "Windows Subsystem for Linux" a été annoncée. Il comprend les appels système Linux, ELF en cours d'exécution, des parties du système de fichiers /proc
, Bash, GCC, (TODO probablement glibc?), apt-get
Et plus: https: // channel9. msdn.com/Events/Build/2016/P488 donc je crois que cela permettra à Windows d'exécuter une grande partie, sinon la totalité, de POSIX. Cependant, il se concentre sur les développeurs/déploiement plutôt que sur les utilisateurs finaux. En particulier, il n'était pas prévu d'autoriser l'accès à l'interface graphique Windows.
Aperçu historique de la compatibilité officielle Microsoft POSIX: http://brianreiter.org/2010/08/24/the-sad-history-of-the-Microsoft-posix-subsystem/
Cygwin est un projet tiers GPL bien connu qui "fournit des fonctionnalités substantielles de l'API POSIX" pour Windows, mais vous oblige à "reconstruire votre application à partir de la source si vous voulez qu'elle s'exécute sur Windows". MSYS2 est un projet connexe qui semble ajouter plus de fonctionnalités au-dessus de Cygwin.
Android
Android possède sa propre bibliothèque C (Bionic) qui ne prend pas entièrement en charge POSIX à partir de Android O: https://stackoverflow.com/questions/27604455/is-Android-posix -compatible
Niveau bonus
Linux Standard Base étend encore POSIX.
Utilisez les index non-frames, ils sont beaucoup plus lisibles et consultables: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenez une version zippée complète des pages HTML pour le grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939
POSIX est la norme du système d'exploitation portable. Il décrit certains utilitaires, API et services qu'un système d'exploitation conforme doit fournir aux logiciels (par exemple les sockets, les E/S de fichiers et le threading) ainsi que les conventions sur la façon dont ceux-ci doivent être appelés à partir d'un programme.
L'idée est qu'un programme écrit pour un système d'exploitation compatible POSIX serait plus facile à porter vers un autre système d'exploitation compatible POSIX que le portage entre des systèmes d'exploitation non conformes POSIX. C'est pourquoi il est beaucoup plus facile de porter une application de, disons, FreeBSD vers Linux que de la porter de FreeBSD vers Windows (bien que Windows supporte ostensiblement un sous-ensemble de POSIX.)
POSIX est un sous-ensemble d'UNIX qui est destiné à couvrir divers environnements de type Unix pour d'autres systèmes d'exploitation; cela comprenait à l'origine des environnements tels que Eunice pour VMS, la personnalité POSIX de Windows NT et Apollo Domain/OS. Vous pouvez le considérer comme une API de portabilité standard pour le sous-ensemble de services du système d'exploitation dont le comportement est commun entre Unix et non-Unix. Voir http://standards.ieee.org/develop/wg/POSIX.html pour plus d'informations.