GNU/Linux >> Tutoriels Linux >  >> Linux

Quelle est la signification de POSIX ?

POSIX est une famille de normes, spécifiée par l'IEEE, pour clarifier et uniformiser les interfaces de programmation d'application (et les problèmes auxiliaires, tels que les utilitaires de ligne de commande) fournis par les systèmes d'exploitation Unix-y. Lorsque vous écrivez vos programmes pour qu'ils s'appuient sur les standards 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 Posix, vous aurez plus de mal si et quand vous voulez porter ce programme ou cette bibliothèque sur d'autres systèmes Unix-y (par exemple, MacOSX) à l'avenir.


Les choses les plus importantes définies par POSIX 7

  1. API C

    Étend considérablement ANSI C avec des éléments tels que :

    • Plus d'opérations sur les fichiers :mkdir , dirname , symlink , readlink , link (liens durs), poll() , stat , sync , nftw()
    • processus et threads :fork , execl , wait , pipe , sémaphores sem_* , mémoire partagée (shm_* ), kill , paramètres de planification (nice , sched_* ), sleep , mkfifo , setpgid()
    • 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 dont elles dépendent, par ex. fork nécessite un concept de processus.

    De nombreux appels système Linux existent pour implémenter une fonction spécifique de l'API POSIX C 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 majeure du bureau Linux :glibc, qui dans de nombreux cas ne fournit qu'un wrapper superficiel pour les appels système.

  2. Utilitaires CLI

    Ex :cd , ls , echo , ...

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

    Implémentation majeure du bureau Linux :GNU Coreutils pour les petits, projets GNU séparés pour les grands :sed , grep , awk , ... Certains utilitaires CLI sont implémentés par Bash en tant qu'éléments intégrés.

  3. Langage shell

    Par exemple, a=b; echo "$a"

    Implémentation majeure du bureau Linux :GNU Bash.

  4. Variables d'environnement

    Ex. :HOME , PATH .

    PATH la sémantique de recherche est spécifiée, y compris la façon dont les barres obliques empêchent PATH chercher.

  5. État de sortie du programme

    ANSI C indique 0 ou EXIT_SUCCESS pour réussir, EXIT_FAILURE en cas d'échec, et laisse le reste de l'implémentation 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 le 128 + SIGNAL_ID règle utilisée par Bash :https://unix.stackexchange.com/questions/99112/default-exit-code-when-process-is-terminated

  6. Expression régulière

    Il existe deux types :BRE (basique) et ERE (étendu). Basic est obsolète et conservé uniquement pour ne pas casser les API.

    Ceux-ci sont implémentés par les fonctions de l'API C et utilisés dans les utilitaires CLI, par ex. grep accepte les BRE par défaut et les ERE avec -E .

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

    Implémentation Linux majeure :la glibc implémente les fonctions sous regex.h qui programment comme grep peut utiliser comme backend.

  7. Structure du répertoire

    Ex. :/dev/null , /tmp

    Le FHS Linux étend considérablement POSIX.

  8. Noms de fichiers

    • / est le séparateur de chemin
    • NUL ne peut pas être utilisé
    • . est cwd , .. parents
    • 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 :qu'est-ce que la conformité posix pour le système de fichiers ?

  9. 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 ex. drapeaux à une seule lettre uniquement (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 ex. ls -- -l pour lister un répertoire nommé -l

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

  10. "POSIX ACL" (listes de contrôle d'accès), par ex. utilisé comme backend pour 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 de près POSIX, mais peu sont en fait certifiés par l'Open Group qui maintient la norme. Les certifiés notables incluent :

  • OS X (Apple) X signifie à la fois 10 et UNIX. Était le premier système Apple POSIX, sorti vers 2001. Voir aussi :OSX est-il un système d'exploitation POSIX ?
  • AIX (IBM)
  • HP-UX (HP)
  • Solaris (Oracle)

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.

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 s'y fier pour la plupart des applications des utilisateurs finaux.

La prise en charge était obsolète dans Windows 8 :

  • Où en est l'implémentation POSIX de Microsoft Windows 7 ?
  • https://superuser.com/questions/495360/does-windows-8-still-implement-posix
  • Demande de fonctionnalité :https://windows.uservoice.com/forums/265757-windows-feature-suggestions/suggestions/6573649-full-posix-support

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, (TODO probablement glibc ?), apt-get et plus:https://channel9.msdn.com/Events/Build/2016/P488 donc je pense que cela permettra à Windows d'exécuter une grande partie, sinon la totalité, de POSIX. Cependant, il est axé 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é Microsoft POSIX officielle :http://brianreiter.org/2010/08/24/the-sad-history-of-the-microsoft-posix-subsystem/

Cygwin est un projet tiers GPL bien connu pour qui "fournit une fonctionnalité API POSIX substantielle" pour Windows, mais nécessite que vous "reconstruisiez votre application à partir de la source si vous voulez qu'elle s'exécute sous Windows". MSYS2 est un projet connexe qui semble ajouter plus de fonctionnalités à 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 est-il compatible avec POSIX ?

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


POSIX est :

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

Fondamentalement, il s'agissait d'un ensemble de mesures visant à faciliter le développement et l'utilisation de différentes versions d'UNIX en ayant une API et des utilitaires (principalement) communs. Conformité POSIX limitée également étendue à diverses versions de Windows.


Linux
  1. Quel est l'équivalent de Posix popen() dans l'API Win32 ?

  2. Quelle est la signification de *nix ?

  3. Quelle est la différence entre les threads NPTL et POSIX ?

  4. Quelle est la signification de fork() et grep sous Linux ?

  5. Que signifie "liste noire" sur GStreamer ?

Qu'est-ce que le Shell sous Linux ?

iptables vs nftables :quelle est la différence ?

Qu'est-ce que la commande kill sous Linux ?

Qu'est-ce que la vulnérabilité Logjam ?

quelle est la signification de 1 à la fin du script awk

Qu'est-ce que le système de fichiers NSFS ?