Les choses les plus importantes que POSIX 7 définit
API C
Étend considérablement ANSI C avec des choses comme:
- plus les opérations de fichier:
mkdir
, dirname
, symlink
, readlink
, link
() liens durs, poll()
, stat
, sync
,nftw()
- processus et threads:
fork
, execl
, wait
, pipe
, semaphors sem_*
, la mémoire partagée ( shm_*
) kill
, les paramètres d'ordonnancement ( nice
, sched_*
), sleep
, mkfifo
,setpgid()
- la 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 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
ou EXIT_SUCCESS
pour le succès, EXIT_FAILURE
pour l’échec, et laisse le reste de l’implémentation défini.
POSIX ajoute:
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 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: 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 exemple ls -- -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 avecsetxattr
.
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