Je vois POSIX mentionné souvent et partout, et j’avais supposé que c’était la norme UNIX de base. Jusqu’à ce que j’ai remarqué l’extrait suivant sur une page de Wikipedia: The Open Group
Open Group est le plus célèbre en tant qu'organisme de certification de la marque UNIX et de sa publication de la norme technique Single UNIX Specification , qui étend les normes POSIX et constitue la définition officielle d'un système UNIX .
Si la définition officielle d'un système UNIX est une extension de POSIX, alors qu'est-ce que POSIX? ,,, Cela semble sûrement être une pierre de touche du monde UNIX, mais je ne sais pas comment il s'intègre dans la vue d'ensemble.
Réponses:
POSIX était d'abord une norme en 1988, bien avant la spécification Single UNIX. Ce fut l'une des tentatives d'unification de tous les divers systèmes UNIX et fourches. POSIX est un standard IEEE, mais comme IEEE n'est pas propriétaire de la marque UNIX®, le standard n'est pas UNIX®, bien qu'il soit basé sur l'API UNIX existante à ce moment-là. 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.
Open Group a publié la spécification Single UNIX (SUSv2) en 1997, basée sur les travaux IEEE de la norme POSIX. SUSv3 a été publié en 2001 par un groupe de travail conjoint entre l'IEEE et The Open Group, connu sous le nom de Austin Group. SUSv3 est également appelé POSIX: 2001 [ 2 ]. Il y a maintenant aussi POSIX: 2004 et POSIX: 2008 qui est le noyau de SUSv4. En ce qui concerne UNIX®, UNIX® correspond à ce que le titulaire actuel de la marque déposée déclare. Depuis 1994, c'est The Open Group.
Novell a acquis le secteur systèmes UNIX® auprès d’AT & T / USL, lieu de naissance d’UNIX®. En 1994, ils ont vendu le droit de la marque UNIX® à X / Open [ 3 ], désormais connu sous le nom de Open Group. Ils ont ensuite vendu le code source UNIX® à SCO UNIXWARE®. [ 3 ] UNIX® lui - même a fait bifurquer plusieurs fois [ 4 ] [ 5 ] en partie en raison du modèle de licence d'AT & T. L'achat d'UNIX® vous a fourni la source complète du système d'exploitation et la chaîne d'outils complète pour le construire. Les modifications apportées à la source peuvent être distribuées et utilisées par toute personne possédant une licence UNIX® d'AT & T. La redevance de licence était dans les milliers.
Le projet BSD de Berkeley apportait de nombreuses 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 n’exigeait pas de droit de licence, ni même une distribution obligatoire, à la différence de la GPL utilisée par le projet GNU et Linux. Cela a entraîné l'inclusion d'une bonne partie du code BSD dans diverses fourches UNIX commerciales. Vers la version 4.3BSD, ils avaient pratiquement remplacé le code source original UNIX® d’AT & T. FreeBSD / NetBSD / OpenBSD sont tous des forks de 4.3BSD qui constituent un système d’exploitation complet et n’ont aucun code source AT & T original. Ils n'ont pas non plus droit à la marque UNIX®, mais une grande partie de leur code est utilisée par les systèmes d'exploitation UNIX commerciaux.
Linux a été développé en 1991, mais contrairement à BSD, il a été développé à partir de zéro 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 des raisons de compatibilité et est de conception UNIX, mais il n’a pas la connexion étroite à AT & T ou UNIX® dont disposent les BSD.
la source
Les choses les plus importantes que POSIX 7 définit
API C
Étend considérablement ANSI C avec des choses comme:
mkdir
,dirname
,symlink
,readlink
,link
() liens durs,poll()
,stat
,sync
,nftw()
fork
,execl
,wait
,pipe
, semaphorssem_*
, la mémoire partagée (shm_*
)kill
, les paramètres d'ordonnancement (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écessitent un concept de processus.De nombreux appels système Linux existent pour mettre en œuvre une fonction API C POSIX spécifique et rendre conformes Linux, par exemple
sys_write
,sys_read
... Beaucoup de ces syscalls ont également des extensions spécifiques à Linux cependant.Principale implémentation de bureau Linux: glibc, qui dans de nombreux cas ne fournit qu'un wrapper peu profond pour les appels système.
Utilitaires CLI
Par exemple:
cd
,ls
,echo
, ...De nombreux utilitaires sont des interfaces clientes directes pour une fonction C API correspondante, par exemple
mkdir
.Major application de bureau Linux: GNU Coreutils pour les petits, les projets GNU séparés pour les grands:
sed
,grep
,awk
, ... Certains utilitaires CLI sont mises en œuvre par Bash comme built-ins .Langage shell
Par exemple,
a=b; echo "$a"
Principale implémentation de bureau Linux: GNU Bash .
Variables d'environnement
Par exemple:
HOME
,PATH
.PATH
la sémantique de recherche est spécifiée , y compris la façonPATH
dont les barres obliques empêchent la recherche .Statut de sortie du programme
ANSI C dit
0
ouEXIT_SUCCESS
pour le succès,EXIT_FAILURE
pour l’échec, et laisse le reste de l’implémentation défini.POSIX ajoute:
126
: commande trouvée mais non exécutable.127
: commande non trouvée.> 128
: terminé par un signal.Mais POSIX ne semble pas spécifier la
128 + SIGNAL_ID
règle utilisée par Bash: Code de sortie par défaut lorsque le processus est terminé?Expression régulière
Il existe deux types: BRE (Basic) et ERE (Extended). Basic est obsolète et n'est gardé que 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 majeure de Linux: glibc implémente les fonctions sous regex.h que des programmes similaires
grep
peuvent utiliser comme back-end.Répertoire struture
Par exemple:
/dev/null
,/tmp
Le Linux FHS étend grandement POSIX.
Noms de fichiers
/
est le séparateur de cheminNUL
Ne peut pas être utilisé.
estcwd
,..
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
Non obligatoire, utilisé par POSIX, mais presque nulle part ailleurs, notamment dans GNU. Mais, il est vrai qu’il est trop restrictif, par exemple, les indicateurs d’une seule lettre (par exemple
-a
), pas de version longue à double trait d’union (par exemple--all
).Quelques conventions largement utilisées:
-
signifie stdin où un fichier est attendu--
termine les drapeaux, par exemplels -- -l
pour lister un répertoire nommé-l
Voir aussi: https://stackoverflow.com/questions/8957222/are-there-standards-for-linux-command-line-switches-and-arguments
"POSIX ACL" (Listes de contrôle d'accès), par exemple, utilisées comme back-end pour
setfacl
.Cela a été retiré, mais il a été mis en œuvre dans plusieurs systèmes d'exploitation, y compris sous Linux avec
setxattr
.Qui se conforme à POSIX?
De nombreux systèmes suivent POSIX de près, mais peu d’entre eux sont certifiés par Open Group, qui maintient la norme. Les notables certifiés incluent:
La plupart des distributions Linux sont très conformes, mais ne sont pas certifiées car elles ne veulent pas payer le contrôle de conformité. K-UX d'Inspur et EulerOS de Huawei en 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 la page du wiki .
les fenêtres
Windows a implémenté POSIX sur certaines de ses distributions professionnelles.
Comme il s’agissait d’une fonctionnalité facultative, les programmeurs ne pouvaient pas l’utiliser pour la plupart des applications des utilisateurs finaux.
Le support était obsolète dans Windows 8:
En 2016, une nouvelle API officielle de type Linux appelée "Windows Subsystem for Linux" a été annoncée. Il inclut les appels système Linux, l'exécution d'ELF, des parties du
/proc
système de fichiers, Bash, GCC ((Globh)),apt-get
et plus encore: https://channel9.msdn.com/Events/Build/2016/P488, donc je le crois permettra à Windows d’exécuter beaucoup, sinon tous, de POSIX. Cependant, il est axé sur les développeurs / le 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é Microsoft POSIX officielle: http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/
Cygwin est un projet tiers bien connu de la GPL pour lequel "fournit une fonctionnalité substantielle d'API POSIX" pour Windows, mais nécessite que vous "reconstruisiez votre application à partir de la source si vous souhaitez qu'elle s'exécute sous Windows". MSYS2 est un projet associé qui semble ajouter davantage de fonctionnalités à Cygwin.
Android
Android possède sa propre bibliothèque C (Bionic) qui ne prend pas complètement en charge POSIX à partir d'Android O: https://stackoverflow.com/questions/27604455/is-android-posix-compatible
Niveau bonus
La base standard Linux étend davantage POSIX.
Utilisez les index non-frames, ils sont beaucoup plus lisibles et consultables: http://pubs.opengroup.org/onlinepubs/9699919799/nfindex.html
Obtenez une version entièrement zippée des pages HTML pour grepping: https://stackoverflow.com/questions/453993/is-there-a-listing-of-the-posix-api-functions/45832939#45832939
la source
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 les threads), ainsi que des conventions sur la manière dont ils 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 sur un autre système d'exploitation compatible POSIX que de le transférer entre des systèmes d'exploitation non compatibles POSIX. C’est pourquoi il est beaucoup plus facile de transférer une application de FreeBSD, par exemple, vers Linux que de la transférer de FreeBSD vers Windows (bien que Windows prenne apparemment en charge un sous-ensemble de POSIX).
la source
POSIX est un sous-ensemble d'UNIX destiné à couvrir divers environnements de type Unix pour d'autres systèmes d'exploitation. Cela incluait à 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 de système d'exploitation dont le comportement est commun à Unix et à d'autres systèmes. Voir http://standards.ieee.org/develop/wg/POSIX.html pour plus d'informations.
la source