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
-
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émaphoressem_*
, 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.
- Plus d'opérations sur les fichiers :
-
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. -
Langage shell
Par exemple,
a=b; echo "$a"
Implémentation majeure du bureau Linux :GNU Bash.
-
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êchentPATH
chercher. -
État de sortie du programme
ANSI C indique
0
ouEXIT_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
-
-
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. -
Structure du répertoire
Ex. :
/dev/null
,/tmp
Le FHS Linux étend considérablement POSIX.
-
Noms de fichiers
/
est le séparateur de cheminNUL
ne peut pas être utilisé.
estcwd
,..
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 ?
-
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 ?
-
"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.