Qu'est-ce que POSIX? J'ai lu l'article Wikipedia et je le lis chaque fois que je rencontre le terme. Le fait est que je n'ai jamais vraiment compris ce que c'est.
Quelqu'un peut-il me l'expliquer en expliquant "le besoin de POSIX"?
linux
unix
posix
terminology
les griffes
la source
la source
Réponses:
POSIX est une famille de normes, spécifiées par l' IEEE , pour clarifier et uniformiser les interfaces de programmation d'application (et les problèmes annexes, tels que les utilitaires de shell de ligne de commande) fournis par les systèmes d'exploitation Unix-y. Lorsque vous écrivez vos programmes pour s'appuyer sur les normes POSIX, vous pouvez être sûr de pouvoir les porter facilement parmi une grande famille de dérivés Unix (y compris Linux, mais sans s'y limiter!); si et quand vous utilisez une API Linux qui n'est pas standardisée dans le cadre de Posix, vous aurez plus de mal si et quand vous voulez porter ce programme ou cette bibliothèque vers d'autres systèmes Unix-y (par exemple, MacOSX) à l'avenir.
la source
Microsoft's market share on desktops, at least, makes it "what the world follows"
- Intéressant de noter à quel point les choses ont changé depuis ce commentaire de 2009 :)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 implémenter une fonction API POSIX C spécifique et rendre Linux conforme, par exemple
sys_write
,sys_read
... Beaucoup de ces syscalls ont également des extensions spécifiques à Linux cependant.Implémentation de bureau Linux majeure: glibc, qui dans de nombreux cas fournit simplement un wrapper peu profond aux appels système.
Utilitaires CLI
Par exemple:
cd
,ls
,echo
, ...De nombreux utilitaires sont des frontaux directs du shell pour une fonction API C 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 mis en œuvre par Bash comme built-ins .Langue du shell
Par exemple,
a=b; echo "$a"
Implémentation de bureau Linux majeure: 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 l'implémentation du reste définie.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: /unix/99112/default-exit-code-when-process-is-terminatedExpression régulière
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
acceptent les BRE par défaut et les ERE avec-E
.Par exemple:
echo 'a.1' | grep -E 'a.[[:digit:]]'
Implémentation Linux majeure: glibc implémente les fonctions sous regex.h que des programmes comme
grep
peuvent utiliser comme backend.Structure du répertoire
Par exemple:
/dev/null
,/tmp
Le Linux FHS étend considérablement POSIX.
Noms de fichiers
/
est le séparateur de cheminNUL
Ne peut pas être utilisé.
estcwd
,..
parenta-zA-Z0-9._-
Voir aussi: qu'est-ce que la conformité posix pour le système de fichiers?
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, il est trop restrictif, par exemple les 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 drapeaux, par exemplels -- -l
pour lister un répertoire nommé-l
Voir aussi: Existe-t-il des normes pour les commutateurs et arguments de ligne de commande Linux?
"ACL POSIX" (Listes de contrôle d'accès), par exemple, comme utilisé pour le backend
setfacl
.Cela a été retiré mais il a été implémenté 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 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 la page 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 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, l'exécution d'ELF, des parties du
/proc
système de fichiers, Bash, GCC, (TODO probablement glibc?),apt-get
Et plus encore: 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 à "recréer 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 d'Android O: Android POSIX est-il compatible?
Niveau bonus
La base standard Linux é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 la grepping: Où est la liste des fonctions de l'API POSIX C?
la source
POSIX c'est:
Fondamentalement, il s'agissait d'un ensemble de mesures pour soulager la douleur du développement et de l'utilisation de différentes versions d'UNIX en ayant une API et des utilitaires (principalement) communs. La conformité POSIX limitée s'est également étendue à diverses versions de Windows.
la source
Permettez-moi de donner l'explication grossière "non officielle".
POSIX est un ensemble de normes qui tente de distinguer les systèmes "UNIX" et UNIX de ceux qui leur sont incompatibles. Il a été créé par le gouvernement américain à des fins d'approvisionnement. L'idée était que les marchés publics fédéraux des États-Unis avaient besoin d'un moyen de spécifier légalement les exigences pour divers types d'appels d'offres et de contrats d'une manière qui pourrait être utilisée pour exclure les systèmes auxquels une base de code ou un personnel de programmation existant ne serait PAS portable.
Puisque POSIX a été écrit post facto ... pour décrire un ensemble peu similaire de systèmes concurrents ... il n'a PAS été écrit d'une manière qui pourrait être mise en œuvre.
Ainsi, par exemple, le NT de Microsoft a été écrit avec suffisamment de conformité POSIX pour se qualifier pour certaines offres ... même si le sous-système POSIX était essentiellement inutile en termes de portabilité pratique et de compatibilité avec les systèmes UNIX.
Diverses autres normes pour UNIX ont été écrites au cours des décennies. Des choses comme le SPEC1170 (spécifié onze cent soixante-dix appels de fonction qui devaient être implémentés de manière compatible) et diverses incarnations du SUS (Single UNIX Specification).
Pour la plupart, ces "normes" se sont révélées inadéquates pour toute application technique pratique. Ils existent surtout pour l'argumentation, les disputes juridiques et d'autres raisons de dysfonctionnement.
la source
POSIX est une norme pour les systèmes d'exploitation qui était censée faciliter l'écriture de logiciels multiplateformes. C'est un problème particulièrement important dans le monde d'Unix.
la source
POSIX est un ensemble de normes mises en avant par IEEE et The Open Group qui décrit comment un Unix idéal fonctionnerait. Les programmeurs, les utilisateurs et les administrateurs peuvent tous se familiariser avec le document POSIX et s'attendre à ce qu'un Unix conforme à POSIX fournisse toutes les fonctionnalités standard mentionnées.
Étant donné que chaque Unix fait les choses un peu différemment - Solaris, Mac OS X, IRIX, BSD et Linux ont tous leurs bizarreries - POSIX est particulièrement utile à ceux de l'industrie car il définit un environnement standard pour fonctionner. Par exemple, la plupart des fonctions de la bibliothèque C sont basées sur POSIX; un programmeur peut donc en utiliser un dans son application et s'attendre à ce qu'il se comporte de la même manière sur la plupart des Unices.
Cependant, les zones divergentes d'Unix sont généralement au centre, plutôt que celles standard.
La grande chose à propos de POSIX est que vous êtes invités à le lire vous-même:
Le numéro 7 est connu sous le nom de POSIX.1-2008, et il y a de nouvelles choses là-dedans - cependant, Google-fu pour POSIX.1 et autres vous permettra de voir l'historique complet derrière ce qu'est Unix.
la source
Extrait du livre: Un guide pratique pour Linux
la source
Posix est plus un OS, c'est un "OS standard". Vous pouvez l'imaginer comme un système d'exploitation imaginaire, qui n'existe pas réellement, mais il a une documentation. Ces documents sont la «norme posix», définie par l'IEEE, qui est la grande organisation standard des États-Unis. Les systèmes d'exploitation implémentant cette spécification sont «conformes Posix».
Les réglementations gouvernementales préfèrent les solutions conformes à Posix dans leurs investissements, ce qui signifie que la conformité à Posix présente un avantage financier important, en particulier pour les grandes entreprises informatiques des États-Unis.
La récompense pour un système d'exploitation entièrement compatible Posix, c'est la garantie qu'il compilera et exécutera toutes les applications compatibles Posix de manière transparente.
Linux est le plus connu. OSX, Solaris, NetBSD et Windows NT jouent également ici. Free- et OpenBSD ne sont que «presque» conformes à Posix. La conformité posix du WinNT n'est qu'une pseudo-solution pour éviter cette réglementation gouvernementale ci-dessus.
la source
Cette norme fournit une base commune pour les systèmes d'exploitation de type Unix. Il spécifie comment le shell doit fonctionner, à quoi s'attendre de commandes comme ls et grep, et un certain nombre de bibliothèques C que les auteurs C peuvent s'attendre à avoir disponibles.
Par exemple, les canaux que les utilisateurs de ligne de commande utilisent pour enchaîner les commandes sont spécifiés en détail ici, ce qui signifie que la fonction popen (canal ouvert) de C est conforme à la norme POSIX et non à la norme ISO C.
la source
POSIX est l'abréviation de Portable Operating System Interface et est une norme IEEE conçue pour faciliter la portabilité des applications. POSIX est une tentative d'un consortium de fournisseurs de créer une seule version standard d'UNIX.
la source
POSIX définit un ensemble de normes pour un système d'exploitation ou un programme. L'objectif est d'écrire de nouveaux logiciels compatibles avec les systèmes de type UNIX.
Par exemple, un programme exécuté sur Linux peut également être compilé et exécuté sur d'autres systèmes de type UNIX comme Solaris, HP-UX et AIX, etc.
Les exemples les plus populaires sont la
GNU Bash
conformité et l'gawk
utilitaire 100% POSIX .la source
Posix régit l'interopérabilité, la portabilité et dans d'autres domaines tels que l'utilisation et le mécanisme de fork, les autorisations
et les normes de système de fichiers tels que / etc, / var, / usr, etc.. Par conséquent, lorsque les développeurs écrivent un programme sous un système compatible Posix tel que par exemple Linux, il n'est généralement pas toujours garanti de fonctionner sur un autre système compatible posix tel que le système AIX d'IBM ou d'autres variantes commerciales d'Unix. Posix est une bonne chose à avoir en tant que tel, il facilite le développement logiciel pour une portabilité maximale pour laquelle il aspire. J'espère que cette réponse a du sens.Merci à Jed Smith & Tinkertim d'avoir signalé mon erreur - ma mauvaise !!! :(
la source
Une spécification (schéma directeur) sur la façon de rendre un système d'exploitation compatible avec le dernier système d'exploitation UNIX (que Dieu le bénisse!). C'est pourquoi macOS et GNU / Linux ont des lignes de commande de terminal, des interfaces graphiques, des bibliothèques, etc. très similaires, car ils ont tous deux été conçus selon le plan POSIX.
POSIX ne dit pas aux ingénieurs et aux programmeurs comment coder mais quoi coder.
la source
Quelques faits sur POSIX qui ne sont pas si brillants.
POSIX est également l'interface d'appel système ou l'API, et elle a presque 30 ans.
Il a été conçu pour l'accès aux données sérialisées au stockage local , en utilisant des ordinateurs uniques avec des processeurs uniques.
La sécurité n'était pas une préoccupation majeure dans POSIX par conception, conduisant à de nombreuses attaques de conditions de concurrence au fil des ans et obligeant les programmeurs à contourner ces limitations.
De graves bogues sont toujours en cours de découverte, des bogues qui auraient pu être évités avec une conception d'API POSIX plus sécurisée.
POSIX s'attend à ce que les utilisateurs émettent un appel synchrone à la fois et attendent ses résultats avant d'émettre le suivant. Les programmeurs d'aujourd'hui s'attendent à émettre de nombreuses demandes asynchrones à la fois pour améliorer le débit global.
Cette API synchrone est particulièrement mauvaise pour accéder aux objets distants et cloud, où la latence élevée est importante.
la source