web-dev-qa-db-fra.com

Quelle est la signification de "POSIX"?

Qu'est-ce que POSIX? J'ai lu le 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'était.

Quelqu'un peut-il m'expliquer s'il vous plaît en expliquant "le besoin de POSIX" aussi?

751
claws

POSIX est une famille de normes, spécifiée par le IEEE , afin de clarifier et d'homogénéiser les interfaces de programmation d'applications (ainsi que les problèmes annexes, tels que les utilitaires Shell en ligne de commande) fournis par Unix-y operating systèmes. Lorsque vous écrivez vos programmes sur des standards POSIX, vous pouvez être certain de pouvoir les porter facilement dans 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 normalisée dans Posix, vous aurez plus de mal si et quand vous souhaitez transférer ce programme ou cette bibliothèque vers d'autres systèmes Unix-y (par exemple, MacOSX).

519
Alex Martelli

Les choses les plus importantes POSIX 7 définit

  1. API C

    Largement étend la norme ANSI C avec des éléments tels que:

    • plusieurs opérations sur les fichiers: mkdir, dirname, symlink, readlink, link (liens fixes), poll() , stat, sync, nftw()
    • processus et threads: fork, execl, pipe, sémaphore sem_* , mémoire partagée (shm_*), kill, paramètres de planification (Nice, sched_*), sleep, mkfifo, setpgid()
    • mise en réseau: socket()
    • gestion de la mémoire: mmap, mlock, mprotect, madvise, brk()
    • utilitaires: expressions régulières (reg*)

    Ces API déterminent également les concepts système sous-jacents sur lesquels elles reposent, par exemple. fork nécessite un concept de processus.

    De nombreux appels système Linux existent pour implémenter une fonction spécifique de l’API C POSIX et rendre compatible Linux, par exemple. sys_write, sys_read, ... Cependant, beaucoup de ces appels système ont également des extensions spécifiques à Linux.

    Principale implémentation de bureau Linux: glibc, qui dans de nombreux cas ne fournit qu'un wrapper peu profond pour les appels système.

  2. Utilitaires CLI

    Exemple: cd, ls, echo, ...

    De nombreux utilitaires sont des interfaces frontales directes pour une fonction C API correspondante, par exemple. mkdir.

    Principale implémentation de bureau Linux: GNU Coreutils pour les petits projets distincts GNU pour les grands projets: sed, grep, awk, ... Certains Les utilitaires de la CLI sont implémentés par Bash en tant que composants intégrés .

  3. Langage shell

    Exemple: a=b; echo "$a"

    Principale implémentation de bureau Linux: GNU Bash .

  4. Variables d'environnement

    Ex .: HOME, PATH.

  5. État de sortie du programme

    ANSI C indique 0 ou EXIT_SUCCESS en cas de succès, EXIT_FAILURE en cas d'échec et laisse l'implémentation restante définie.

    POSIX ajoute:

  6. 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.

    Exemple: echo 'a.1' | grep -E 'a.[[:digit:]]'

    Implémentation majeure de Linux: la glibc implémente les fonctions sous regex.h , que des programmes comme grep peuvent utiliser comme back-end.

  7. Structure de répertoire

    Exemple: /dev/null, /tmp

    Linux FHS étend considérablement POSIX.

  8. Noms de fichiers

    • / est le séparateur de chemin
    • NUL ne peut pas être utilisé
    • . est cwd, .. parent
    • noms de fichiers portables
      • utiliser au maximum 14 caractères et 256 pour le chemin complet
      • ne peut contenir que: a-zA-Z0-9._-

    Voir aussi: quelle est la conformité posix pour un système de fichiers?

  9. Conventions de l'API de l'utilitaire de ligne de commande

    Non obligatoire, utilisé par POSIX, mais presque nulle part ailleurs, notamment pas dans GNU. Mais, c’est vrai, c’est trop restrictif, par exemple Indicateurs à une seule lettre uniquement (par exemple -a), pas de version longue à double trait d'union (par exemple --all).

    Quelques conventions largement utilisées:

    • - signifie stdin lorsqu'un fichier est attendu
    • -- termine les drapeaux, par exemple. ls -- -l pour lister un répertoire nommé -l 

    Voir aussi: Existe-t-il des normes pour les arguments et les commutateurs de ligne de commande Linux?

Qui se conforme à POSIX?

Beaucoup de systèmes suivent POSIX de près, mais peu sont en réalité 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 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 sur la page wikiLes 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: 

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 bien connu de la GPL, qui "fournit une fonctionnalité substantielle d'API POSIX" pour Windows, mais nécessite que vous "reconstruisiez votre application à partir du code 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: Android est-il compatible POSIX?

Niveau bonus

Linux Standard Base é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 compressée complète des pages HTML pour grepping: Où se trouve la liste des fonctions de l'API C POSIX?

Get a full zipped version of the HTML pages for grepping: Where is the list of the POSIX C API functions?

POSIX est:

POSIX (prononcé/ˈpɒzɪks /) ou "Interface de système d'exploitation portable [Pour Unix]" 1 est le nom d'une famille des normes connexes spécifiées par le IEEE pour définir l'application interface de programmation (API), ainsi que avec interfaces Shell et utilitaires pour les logiciels compatibles avec les variantes du système d'exploitation Unix, bien que la norme peut s'appliquer à tout système opérateur.

Il s’agissait essentiellement d’un ensemble de mesures visant à atténuer les difficultés liées au développement et à l’utilisation de différentes versions d’UNIX grâce à une API (généralement) commune et à des utilitaires communs. La conformité POSIX limitée a également été étendue à diverses versions de Windows.

65
cletus

Permettez-moi de donner une explication "officieuse", assez grossière.

POSIX est un ensemble de normes qui tente de distinguer les systèmes "UNIX" et similaires à ceux qui leur sont incompatibles. Il a été créé par le gouvernement américain à des fins d’achat. L’idée était que les marchés fédéraux américains devaient permettre de spécifier légalement les exigences applicables à divers types d’appels d’offres et de contrats de manière à exclure les systèmes auxquels une base de code ou un personnel de programmation existants NE seraient PAS portables.

Depuis que POSIX a été écrit post facto ... pour décrire un ensemble approximativement similaire de systèmes concurrents ... il n'a PAS été écrit de manière à pouvoir être mis en œuvre.

Ainsi, par exemple, le NT de Microsoft a été écrit avec suffisamment de conformité POSIX pour être éligible à certaines offres ... même si le sous-système POSIX était essentiellement inutile en termes de portabilité 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 (onze cent soixante-dix appels de fonction spécifiés devant être implémentés de manière compatible) et diverses incarnations du SUS (spécification UNIX unique).

Pour la plupart, ces "normes" ont été inadéquates pour toute application technique pratique. Ils existent le plus souvent pour l’argumentation, les disputes juridiques et d’autres raisons dysfonctionnelles.

40
Jim Dennis

POSIX est un ensemble de normes présentées par IEEE et The Open Group qui décrit le fonctionnement d'un système Unix idéal. Les programmeurs, les utilisateurs et les administrateurs peuvent tous se familiariser avec le document POSIX et s'attendre à ce qu'un système Unix conforme à la réclamation POSIX fournisse toutes les fonctionnalités standard mentionnées.

Étant donné que chaque système Unix agit différemment (Solaris, Mac OS X, IRIX, BSD et Linux ont tous leurs particularités), POSIX est particulièrement utile pour les professionnels du secteur, car il définit un environnement standard dans lequel opérer. 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 dans la plupart des Unices.

Cependant, les zones divergentes de Unix sont généralement la cible, plutôt que les standards.

L'avantage de POSIX est que vous pouvez le lire vous-même:

Spécifications de base de groupe ouvert, numéro 7

Le numéro 7 est connu sous le nom de POSIX.1-2008 et contient de nouvelles choses. Cependant, Google-fu pour POSIX.1 et autres vous permettront de voir l’historique complet derrière Unix.

28
Jed Smith

POSIX est une norme pour les systèmes d’exploitation censée faciliter l’écriture de logiciels multiplates-formes. C'est particulièrement important dans le monde d'Unix.

27
Hank Gay

En 1985, particuliers de sociétés de l’industrie informatique réunis pour développer la norme POSIX (Système d’exploitation portable Interface pour environnements informatiques), qui repose en grande partie sur sur la définition d’interface SVIX (UNIX System V) et sur une autre version antérieure efforts de normalisation. Les États-Unis ont été à l'origine de ces efforts. gouvernement, qui avait besoin d’un environnement informatique standard pour réduire au minimum ses coûts de formation et d’achat. Publié en 1988, POSIX est un groupe des normes IEEE qui définissent les interfaces API, Shell et d’utilitaire pour un système d'exploitation. Bien que destiné aux systèmes de type UNIX, le fichier les normes peuvent s’appliquer à n’importe quel système d’exploitation compatible. Maintenant que ceux-ci les normes sont de plus en plus acceptées, les développeurs de logiciels sont capables de développer des applications qui fonctionnent sur toutes les versions conformes d’UNIX, Linux et autres systèmes d'exploitation.

Extrait du livre: Guide pratique de Linux

5
Koray Tugay

Posix est plus qu'un système d'exploitation, c'est un "standard de système d'exploitation". Vous pouvez l’imaginer comme un système d’exploitation imaginaire, qui n’existe pas, mais qui possède une documentation. Ces papiers sont le "standard posix", défini par l'IEEE, qui est la grande organisation de 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. Ainsi, être conforme à Posix présente un avantage financier important, en particulier pour les grandes entreprises informatiques des États-Unis.

La récompense d’un système d’exploitation parfaitement conforme à 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 sont également utilisés ici. Free- et OpenBSD ne sont que "presque" compatibles avec Posix. La conformité posix du WinNT n'est qu'une pseudo-solution pour éviter cette réglementation gouvernementale ci-dessus.

2
peterh

Cette norme fournit une base commune pour les systèmes d'exploitation de type Unix. Il spécifie le fonctionnement du shell, ce à quoi s'attendre de commandes telles que ls et grep, et un certain nombre de bibliothèques C que les auteurs C peuvent s'attendre à avoir.

Par exemple, les canaux utilisés par les utilisateurs de la ligne de commande pour chaîner les commandes sont spécifiés en détail ici, ce qui signifie que la fonction popen de C (canal ouvert) est conforme à la norme POSIX et non à la norme ISO C.

2
Koray Tugay

POSIX définit un ensemble de normes pour un système d'exploitation ou un programme ..__ Le but est d'écrire un nouveau logiciel compatible avec les systèmes de type UNIX.

Par exemple, un programme fonctionnant sous Linux peut également être compilé et exécuté sur d'autres systèmes de type UNIX tels que Solaris, HP-UX, AIX, etc.

Les exemples les plus populaires sont GNU Bash, qui correspond à 100% à la conformité POSIX et à l'utilitaire gawk.

0
sras

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 modèle POSIX.

POSIX ne dit pas aux ingénieurs et aux programmeurs comment coder, mais quoi.

0
MCH

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 normes de système de fichiers telles que/etc,/var,/usr et ainsi de suite . Par conséquent, lorsque les développeurs écrivent un programme sous un système compatible Posix tel que, par exemple, Linux, son exécution sur un autre système conforme à Posix tel que le système AIX d'IBM ou d'autres variantes commerciales d'Unix n'est pas toujours garantie. Posix est une bonne chose car, en tant que tel, il facilite le développement logiciel pour une portabilité maximale, ce à quoi il aspire. J'espère que cette réponse a du sens. 

Merci à Jed Smith & Tinkertim d'avoir signalé mon erreur - ma mauvaise !!! :(

0
t0mm13b

POSIX signifie Portable Operating System Interface. Il s'agit d'une norme IEEE conçue pour faciliter la portabilité des applications. POSIX est une tentative d'un consortium de fournisseurs de créer une version standard unique d'UNIX.

0
Farruh Habibullaev

Quelques faits sur POSIX qui ne sont pas si brillants. 

POSIX est également l’interface d’appel système ou l’API, qui a presque 30 ans.  

Il a été conçu pour permettre un accès en série aux données stockées sur le stockage local, en utilisant des ordinateurs uniques dotés de processeurs uniques.

La conception de POSIX n’était pas une préoccupation majeure pour la sécurité, ce qui a provoqué de nombreuses attaques au cours des années et a forcé les programmeurs à contourner ces limitations. 

Des bugs sérieux sont encore en train d'être découverts, des bugs 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 actuels s'attendent à émettre plusieurs requêtes asynchrones à la fois pour améliorer le débit global. 

Cette API synchrone est particulièrement mauvaise pour accéder à des objets distants et cloud, où la latence élevée est importante.

0
prosti