Conformité
Conformité de l'implémentation
Conformément à la norme POSIX.1-2017, les exigences de conformité de l'implémentation décrites dans cette page s'appliquent.
Prérequis
Une implémentation conforme doit répondre à tous les critères suivants :
- Le système doit prendre en charge tous les utilitaires, fonctions et fonctionnalités définis dans POSIX.1-2017 et requis pour la conformité POSIX (voir Conformité POSIX). Ces interfaces doivent prendre en charge le comportement fonctionnel décrit ici.
- Le système peut prendre en charge l'option X/Open System Interfaces (XSI), comme décrit dans la section Conformité XSI.
- Le système peut prendre en charge une ou plusieurs options, comme décrit dans la section Groupes d'options. Lorsqu'une implémentation déclare qu'une option est prise en charge, tous ses composants doivent être fournis.
- Le système peut fournir des extensions non standard. Il s'agit de fonctionnalités non requises par POSIX.1-2017, notamment :
- Fonctions supplémentaires
- Entêtes supplémentaires
- Symboles supplémentaires dans les entêtes standard
- Utilitaires supplémentaires
- Options supplémentaires pour les utilitaires standard
- Variables d'environnement supplémentaires
- Types de fichiers supplémentaires
- Systèmes de fichiers non conformes (par exemple, systèmes de fichiers hérités pour lesquels _POSIX_NO_TRUNC est faux, systèmes de fichiers insensibles à la casse ou systèmes de fichiers réseau)
- Systèmes de fichiers à remplissage dynamique (par exemple, /proc)
- Fichiers spéciaux de caractères supplémentaires avec des propriétés spécifiques (par exemple, /dev/stdin, /dev/stdout et /dev/stderr)
- Les extensions non standard des utilitaires, fonctions ou fonctionnalités spécifiés dans POSIX.1-2017 doivent être identifiées comme telles dans la documentation du système. Leur utilisation peut modifier le comportement des utilitaires, fonctions ou fonctionnalités définis par POSIX.1-2017. Le document de conformité doit définir un environnement dans lequel une application peut être exécutée avec le comportement spécifié par POSIX.1-2017. En aucun cas, un tel environnement ne doit nécessiter la modification d'une application POSIX strictement conforme (voir Application POSIX strictement conforme).
Remarque : Si la méthode documentée de configuration d'un environnement conforme nécessite la définition d'une ou plusieurs variables d'environnement, leurs valeurs ne peuvent pas contenir de caractères d'espacement, car la fonction confstr() doit pouvoir les renvoyer dans une liste de paires variable=valeur séparées par des espaces. Voir XSH confstr.
Documentation
Un document de conformité contenant les informations suivantes doit être disponible pour toute implémentation revendiquant la conformité à POSIX.1-2017. Le document de conformité doit avoir la même structure que POSIX.1-2017, les informations étant présentées dans les sections et sous-sections appropriées. Les sections et sous-sections composées uniquement de titres de sections subordonnées, sans autre information, ne sont pas requises. Le document de conformité ne doit pas contenir d'informations sur des fonctionnalités ou fonctionnalités étendues hors du champ d'application de POSIX.1-2017.
Le document de conformité doit contenir une déclaration indiquant le nom complet, le numéro et la date de la norme applicable. Il peut également répertorier les normes logicielles internationales disponibles pour une application POSIX conforme. Les caractéristiques applicables, lorsque la documentation est requise par l'une de ces normes ou par des normes d'organismes gouvernementaux, peuvent également être incluses.
Le document de conformité doit décrire les valeurs limites des entêtes <limits.h> et <unistd.h>, en précisant les valeurs, les conditions de variation de ces valeurs et les limites de ces variations, le cas échéant.
Le document de conformité doit décrire le comportement de l'implémentation pour toutes les fonctionnalités définies par l'implémentation dans POSIX.1-2017. Cette exigence doit être satisfaite en listant ces fonctionnalités et en fournissant soit une référence spécifique à la documentation du système, soit la syntaxe et la sémantique complètes de ces fonctionnalités. Lorsque la valeur ou le comportement de l'implémentation est conçu pour être variable ou personnalisé à chaque instanciation du système, le fournisseur de l'implémentation doit documenter la nature et les intervalles autorisées de cette variation.
Le document de conformité peut spécifier le comportement de l'implémentation pour les fonctionnalités pour lesquelles POSIX.1-2017 stipule que les implémentations peuvent varier ou pour lesquelles les fonctionnalités sont identifiées comme non définies ou non spécifiées.
Le document de conformité ne doit pas contenir de documentation autre que celle spécifiée dans les paragraphes précédents, sauf si une telle documentation est spécifiquement autorisée ou requise par d'autres dispositions de POSIX.1-2017.
Les expressions «doit documenter» ou «doit être documenté» dans POSIX.1-2017 signifient que la documentation de la fonctionnalité doit figurer dans le document de conformité, comme décrit précédemment, sauf si le document de conformité contient une référence explicite indiquant où trouver ces informations dans la documentation du système.
La documentation du système doit également contenir les informations figurant dans le document de conformité.
Conformité POSIX
Une implémentation conforme doit répondre aux critères suivants de conformité POSIX.
Interfaces système POSIX
Les exigences suivantes s'appliquent aux interfaces système (fonctions et entêtes) :
- Le système doit prendre en charge toutes les fonctions et tous les entêtes obligatoires définis dans POSIX.1-2017 et doit définir la constante symbolique _POSIX_VERSION sur la valeur 200809L.
- Bien que toutes les implémentations conformes à POSIX.1-2017 prennent en charge l'ensemble des fonctionnalités décrites ci-dessous, des procédures de configuration spécifiques au système ou au système de fichiers peuvent supprimer ou modifier tout ou partie de ces fonctionnalités. De telles configurations ne doivent pas être effectuées si une conformité stricte est requise.
- Les constantes symboliques suivantes doivent être définies avec une valeur différente de -1. Si une constante est définie avec la valeur zéro, les applications doivent utiliser les fonctions sysconf(), pathconf() ou fpathconf(), ou l'utilitaire getconf, pour déterminer les fonctionnalités présentes sur le système à ce moment précis ou pour le chemin d'accès concerné :
- Les constantes symboliques suivantes doivent être définies par l'implémentation comme suit :
- Constantes symboliques définies avec la valeur 200809L :
- Constantes symboliques définies avec une valeur supérieure à zéro :
- Constantes symboliques définies avec une valeur autre que -1 :
- Le système peut prendre en charge une ou plusieurs options (voir Options) désignées par les constantes symboliques suivantes :
| Constante | Description |
|---|---|
| _POSIX_CHOWN_RESTRICTED | L'utilisation de chown() est limitée à un processus avec des privilèges appropriés et à la modification de l'ID de groupe d'un fichier uniquement vers l'ID de groupe effectif du processus ou vers l'un de ses ID de groupe supplémentaires. |
| _POSIX_NO_TRUNC | Les composantes de chemin d'accès plus longs que {NAME_MAX} génèrent une erreur. |
| Constante | Description |
|---|---|
| _POSIX_ASYNCHRONOUS_IO | Indique la prise en charge des entrées/sorties asynchrones (AIO), permettant l'exécution en arrière-plan d'opérations d'entrée/sortie. |
| _POSIX_BARRIERS | Indique la prise en charge des barrières de synchronisation pour les processus léger, utilisées pour coordonner plusieurs processus léger. |
| _POSIX_CLOCK_SELECTION | Indique la prise en charge de la sélection d'horloge pour les temporisations des processus légers et autres mécanismes temporels. |
| _POSIX_MAPPED_FILES | Indique la prise en charge de la mémoire partagée via la cartographie de fichiers en mémoire (mmap). |
| _POSIX_MEMORY_PROTECTION | Indique la prise en charge de la protection de la mémoire (protection en lecture, écriture et exécution sur des pages mémoire). |
| _POSIX_READER_WRITER_LOCKS | Indique la prise en charge des verrous lecteur-rédacteur pour la synchronisation d'accès concurrent à une ressource. |
| _POSIX_REALTIME_SIGNALS | Indique la prise en charge des signaux en temps réel, offrant des files de signaux avec priorités. |
| _POSIX_SEMAPHORES | Indique la prise en charge des sémaphores POSIX pour la synchronisation entre processus ou processus léger. |
| _POSIX_SPIN_LOCKS | Indique la prise en charge des spinlocks, des verrous légers qui s'attendent activement plutôt que de bloquer un processus léger. |
| _POSIX_THREAD_SAFE_FUNCTIONS | Indique que certaines fonctions standards sont réentrantes et donc utilisables en toute sécurité par plusieurs processus léger. |
| _POSIX_THREADS | Indique la prise en charge des processus léger POSIX (pthreads), un modèle de programmation multithreadé. |
| _POSIX_TIMEOUTS | Indique la prise en charge des délais d'attente sur certaines primitives de synchronisation comme les mutex et sémaphores. |
| _POSIX_TIMERS | Indique la prise en charge des minuteries POSIX pour la gestion des événements temporisés en temps réel. |
| _POSIX2_C_BIND | Indique la conformité à l'interface de liaison C de POSIX.2, qui assure la disponibilité d'une API standard en langage C. |
| Constante | Description |
|---|---|
| _POSIX_JOB_CONTROL | Indique la prise en charge du contrôle des tâches, permettant aux processus de passer en arrière-plan ou en avant-plan et d'être suspendus/repris via des signaux comme SIGSTOP et SIGCONT. |
| _POSIX_REGEXP | Indique la prise en charge des expressions régulières POSIX, utilisées pour la correspondance et la manipulation de chaînes de caractères. |
| _POSIX_SAVED_IDS | Indique la prise en charge de l'enregistrement des identifiants utilisateur effectif et réel, permettant à un processus de restaurer son UID effectif après un changement temporaire. |
| _POSIX_SHELL | Indique la disponibilité d'un interpréteur de commandes conforme à POSIX, tel que le shell Bourne (sh). |
| Constante | Description |
|---|---|
| _POSIX_VDISABLE | Indique la valeur utilisée pour désactiver une fonction de contrôle de terminal spécifique. Lorsqu'un caractère de contrôle (comme Ctrl+C) est configuré sur cette valeur, il est désactivé et n'a aucun effet. |
Remarque : Les symboles ci-dessus représentent des options historiques n'étant plus autorisées, mais étant conservées ici pour des raisons de rétrocompatibilité des applications.
| Constante | Description |
|---|---|
| _POSIX_ADVISORY_INFO | Indique la prise en charge des mécanismes d'information et de recommandation pour l'utilisation des ressources du système. |
| _POSIX_CPUTIME | Indique la prise en charge du suivi de l'utilisation du temps CPU par le processus léger. |
| POSIX_FSYNC | Indique la prise en charge de la fonction fsync(), qui force l'écriture des données d'un fichier sur le disque. |
| _POSIX_IPV6 | Indique la prise en charge du protocole réseau IPv6. |
| _POSIX_MEMLOCK | Indique la prise en charge du verrouillage en mémoire des pages d'un processus pour éviter leur pagination. |
| _POSIX_MEMLOCK_RANGE | Indique la prise en charge du verrouillage de plages spécifiques de mémoire d'un processus. |
| _POSIX_MESSAGE_PASSING | Indique la prise en charge de la communication entre processus via les files de messages POSIX. |
| _POSIX_MONOTONIC_CLOCK | Indique la prise en charge d'une horloge monotone, qui ne peut pas reculer (utile pour mesurer des intervalles de temps). |
| _POSIX_PRIORITIZED_IO | Indique la prise en charge des opérations d'entrée/sortie avec priorités. |
| _POSIX_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement en temps réel avec gestion des priorités. |
| _POSIX_RAW_SOCKETS | Indique la prise en charge des sockets bruts permettant l'envoi et la réception de paquets réseau sans traitement par le système. |
| _POSIX_SHARED_MEMORY_OBJECTS | Indique la prise en charge des objets de mémoire partagée POSIX (shm_open, shm_unlink). |
| _POSIX_SPAWN | Indique la prise en charge de la fonction posix_spawn(), une alternative à fork() pour créer de nouveaux processus de manière plus efficace. |
| _POSIX_SPORADIC_SERVER | Indique la prise en charge des serveurs sporadiques pour le contrôle de charge en temps réel des processus léger. |
| _POSIX_SYNCHRONIZED_IO | Indique la prise en charge des opérations d'entrée/sortie synchronisées, où les données sont écrites sur le support physique avant validation. |
| _POSIX_THREAD_ATTR_STACKADDR | Indique la prise en charge de la définition de l'adresse de la pile d'un processus léger via ses attributs (pthread_attr_setstackaddr). |
| _POSIX_THREAD_CPUTIME | Indique la prise en charge du suivi du temps CPU utilisé par chaque processus léger individuellement. |
| _POSIX_THREAD_ATTR_STACKSIZE | Indique la prise en charge de la définition de la taille de la pile d'un processus léger via ses attributs (pthread_attr_setstacksize). |
| _POSIX_THREAD_PRIO_INHERIT | Indique la prise en charge de l'héritage de priorité pour éviter l'inversion de priorité lors de l'utilisation de mutex. |
| _POSIX_THREAD_PRIO_PROTECT | Indique la prise en charge de la protection de priorité, où un mutex peut avoir une priorité maximale spécifiée. |
| _POSIX_THREAD_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement des processus léger en fonction de leur priorité. |
| _POSIX_THREAD_PROCESS_SHARED | Indique la prise en charge du partage des objets de synchronisation entre plusieurs processus (exemple : mutex ou sémaphores partagés). |
| _POSIX_THREAD_SPORADIC_SERVER | Indique la prise en charge des serveurs sporadiques pour la gestion des priorités en temps réel des processus léger. |
| _POSIX_TRACE | Indique la prise en charge des fonctionnalités de traçage des événements du système. |
| _POSIX_TRACE_EVENT_FILTER | Indique la prise en charge du filtrage des événements tracés. |
| _POSIX_TRACE_INHERIT | Indique que les processus enfants héritent des paramètres de traçage du processus parent. |
| _POSIX_TRACE_LOG | Indique la prise en charge de l'enregistrement des traces dans un fichier journal. |
| _POSIX_TYPED_MEMORY_OBJECTS | Indique la prise en charge de la mémoire typée POSIX, permettant d'allouer des segments mémoire avec des types spécifiques. |
| _XOPEN_CRYPT | Indique la prise en charge de la fonction crypt(), utilisée pour le chiffrement des mots de passe. |
| _XOPEN_REALTIME | Indique la prise en charge des extensions POSIX en temps réel (gestion de priorités, timers, signaux, etc.). |
| _XOPEN_REALTIME_THREADS | Indique la prise en charge des extensions POSIX en temps réel pour les processus léger (ordonnancement en temps réel, synchronisation avancée,...). |
| _XOPEN_STREAMS | Indique la prise en charge du modèle de communication STREAMS, utilisé pour gérer les périphériques de type flux (ex : terminaux, sockets). |
| _XOPEN_UNIX | Indique la conformité aux extensions UNIX spécifiées par X/Open, incluant des fonctionnalités supplémentaires comme les signaux, IPC, et le système de fichiers UNIX. |
Si l'une des constantes symboliques _POSIX_TRACE_EVENT_FILTER, _POSIX_TRACE_LOG ou _POSIX_TRACE_INHERIT est définie avec une valeur différente de -1, la constante symbolique _POSIX_TRACE doit également être définie avec une valeur différente de -1.
Si l'option Informations consultatives est prise en charge, au moins un système de fichiers doit prendre en charge cette fonctionnalité.
Interpréteur de commande et utilitaires POSIX
Les exigences suivantes s'appliquent à l'interpréteur de commande et aux utilitaires :
- Le système doit fournir tous les utilitaires obligatoires du volume Shell et utilitaires de POSIX.1-2017, avec tous les comportements fonctionnels y étant décrits.
- Le système doit prendre en charge les fonctionnalités de fichiers volumineux décrites dans le volume Shell et utilitaires de POSIX.1-2017.
- Le système peut prendre en charge une ou plusieurs options (voir Options) désignées par les constantes symboliques suivantes. (Les noms littéraux ci-dessous s'appliquent à l'utilitaire getconf.) :
| Constante | Description |
|---|---|
| POSIX2_C_DEV | Indique la prise en charge des outils de développement en langage C conformes à POSIX.2, incluant c99. |
| POSIX2_CHAR_TERM | Indique la prise en charge des interfaces pour les terminaux en mode caractère, y compris les bibliothèques comme curses et termcap. |
| POSIX2_FORT_DEV | Indique la prise en charge des outils de développement en langage Fortran, comme fort77. |
| POSIX2_FORT_RUN | Indique la prise en charge de l'exécution de programmes Fortran conformes à POSIX. |
| POSIX2_LOCALEDEF | Indique la prise en charge des outils de définition de locale (localedef), permettant de créer et gérer des paramètres régionaux. |
| POSIX2_PBS | Indique la prise en charge du système de gestion de tâches par lots POSIX (Process Batch Scheduling). |
| POSIX2_PBS_ACCOUNTING | Indique la prise en charge des fonctionnalités d'enregistrement comptable des tâches dans un système PBS. |
| POSIX2_PBS_LOCATE | Indique la prise en charge de la localisation et de l'interrogation des files d'attente PBS. |
| POSIX2_PBS_MESSAGE | Indique la prise en charge des messages de communication entre les utilisateurs et le système PBS. |
| POSIX2_PBS_TRACK | Indique la prise en charge du suivi des tâches soumises au système PBS. |
| POSIX2_SW_DEV | Indique la prise en charge des outils de développement logiciel conformes à POSIX, y compris lex, yacc, make, awk, sed, etc. |
| POSIX2_UPE | Indique la prise en charge des Utilisateur Portable Extensions (UPE), incluant vi, ex, more et les commandes POSIX interactives. |
| XOPEN_UNIX | Indique la conformité aux extensions UNIX de X/Open, garantissant un environnement UNIX standard avec les API système essentielles. |
| XOPEN_UUCP | Indique la prise en charge du protocole UUCP (Unix-to-Unix Copy Protocol), utilisé pour transférer des fichiers et des courriers électroniques entre systèmes UNIX. |
Des options de liaisons de langage et d'utilitaires de développement supplémentaires peuvent être fournies dans d'autres normes connexes ou dans une future version de la présente norme. Dans le premier cas, des constantes symboliques supplémentaires de même forme générale que celles présentées dans cette sous-section doivent être définies par le document normatif concerné et mises à disposition de l'application sans nécessiter de mise à jour de POSIX.1-2017.
Conformité XSI
[XSI] Cette section décrit les critères de conformité des implémentations à l'option X/Open System Interfaces (XSI) (voir XSI). Les fonctionnalités décrites dans cette section doivent être fournies pour les implémentations prenant en charge l'option XSI (le reste de cette section n'est pas détaillé).
POSIX.1-2017 décrit les utilitaires, fonctions et fonctionnalités offerts aux programmes d'application par l'option X/Open System Interfaces (XSI). Une implémentation conforme à XSI doit satisfaire aux critères de conformité POSIX et aux exigences suivantes listées dans cette page.
Les implémentations conformes à XSI doivent définir la constante symbolique _XOPEN_UNIX sur une valeur autre que -1 et doivent définir la constante symbolique _XOPEN_VERSION sur la valeur 700.
Interfaces système XSI
Les exigences suivantes s'appliquent aux interfaces système lorsque l'option XSI est prise en charge :
- Le système doit prendre en charge toutes les fonctions et tous les en-têtes définis dans POSIX.1-2017 dans le cadre de l'option XSI, identifiés par le marquage XSI dans la section SYNOPSIS, ainsi que toutes les extensions marquées du marquage XSI (voir Codes) dans le texte.
- Le système doit prendre en charge les options suivantes définies dans POSIX.1-2017 (voir Options) :
- Le système peut prendre en charge les groupes d'options XSI suivants (voir Groupes d'options XSI) définis dans POSIX.1-2017 :
- Chiffrement
- Temps réel
- Temps réel avancé
- Processus légers temps réel
- Processus légers temps réel avancés
- Traçage
- XSI STREAMS (Flux XSI)
| Constante | Description |
|---|---|
| _POSIX_FSYNC | Indique la prise en charge de l'opération fsync(), permettant de forcer l'écriture des données d'un fichier sur le disque pour garantir leur persistance. |
| _POSIX_THREAD_ATTR_STACKADDR | Indique la prise en charge de l'attribut pthread_attr_setstackaddr(), permettant de spécifier une adresse mémoire pour la pile d'un processus léger. |
| _POSIX_THREAD_ATTR_STACKSIZE | Indique la prise en charge de l'attribut pthread_attr_setstacksize(), qui permet de définir la taille de la pile d'un processus léger. |
| _POSIX_THREAD_PROCESS_SHARED | Indique la prise en charge des objets de synchronisation (mutex, condition variables, sémaphores) pouvant être partagés entre plusieurs processus via des mémoires partagées. |
Conformité de l'interpréteur de commande et des utilitaires XSI
Les exigences suivantes s'appliquent au interpréteur de commande et aux utilitaires lorsque l'option XSI est prise en charge :
- Le système doit prendre en charge tous les utilitaires définis dans le volume Shell et utilitaires de POSIX.1-2017 dans le cadre de l'option XSI, identifiés par le marquage XSI dans la section SYNOPSIS, ainsi que toutes les extensions marquées du marquage XSI (voir Codes) dans le texte.
- Le système doit prendre en charge les options Utilitaires de portabilité utilisateur et Caractéristiques du terminal.
- Le système doit prendre en charge la création de paramètres régionaux (voir Locale).
- L'utilitaire de développement en langage C c99 doit être pris en charge.
- L'option Utilitaires de développement XSI peut être prise en charge. Elle comprend les utilitaires de développement logiciel suivants :
| Commande | Description |
|---|---|
| admin | Gère les fichiers SCCS (Source Code Control System), permet de créer, modifier et configurer les fichiers de contrôle de version. |
| cflow | Génère un graphe d'appel des fonctions d'un programme en C, utile pour analyser la structure du code source. |
| ctags | Crée une base de données d'étiquettes (tags) pour un code source, permettant une navigation rapide dans les fichiers source avec des éditeurs comme vi. |
| cxref | Analyse un programme en C et génère une liste des références croisées des symboles utilisés. |
| delta | Enregistre les modifications apportées à un fichier sous contrôle de version SCCS en créant une nouvelle révision. |
| get | Extrait une version spécifique d'un fichier sous SCCS pour consultation ou modification. |
| nm | Affiche la table des symboles d'un fichier objet ou d'une bibliothèque, utile pour l'analyse des symboles d'un programme. |
| prs | Affiche les informations d'historique d'un fichier sous SCCS, y compris les commentaires de modification et les métadonnées. |
| rmdel | Supprime une version spécifique d'un fichier sous SCCS, généralement utilisée pour corriger des erreurs d'intégration. |
| sact | Affiche la liste des fichiers SCCS en cours d'édition, indiquant quelles versions sont verrouillées pour modification. |
| sccs | Interface principale du système de gestion de versions SCCS, permettant de gérer des fichiers source avec des sous-commandes comme get, delta et admin. |
| unget | Annule une extraction (get -e) d'un fichier sous SCCS, libérant le verrou sans enregistrer les modifications. |
| val | Vérifie l'intégrité d'un fichier SCCS en validant son format et sa cohérence. |
| what | Recherche et affiche les identifiants de version dans un fichier source ou binaire, en extrayant les chaînes marquées avec @(#). |
Groupes d'options
Un groupe d'options est un ensemble de fonctions ou d'options connexes définies dans le volume « Interfaces système » de POSIX.1-2017.
Si une implémentation prend en charge un groupe d'options, le système doit prendre en charge le comportement fonctionnel décrit ici.
Si une implémentation ne prend pas en charge un groupe d'options, le système n'a pas besoin de prendre en charge le comportement fonctionnel décrit ici.
Considérations relatives au sous-profilage
Les normes de profilage prenant en charge des exigences fonctionnelles inférieures à celles requises par POSIX.1-2017 peuvent sous-ensembles les fonctionnalités obligatoires et facultatives requises pour la conformité POSIX (voir Conformité POSIX) ou XSI (voir Conformité XSI). Ces profils doivent organiser ces sous-ensembles en groupes d'options de sous-profilage.
Les considérations relatives au sous-profilage XRAT (informatives) décrivent un ensemble représentatif de ces groupes d'options de sous-profilage destinés aux profils applicables aux systèmes temps réel spécialisés. POSIX.1-2017 n'exige pas que la présence de groupes d'options de sous-profilage soit testable à la compilation (sous forme de symboles définis dans un en-tête) ou à l'exécution (via sysconf() ou getconf).
Un groupe d'options de sous-profilage peut fournir des fonctionnalités système de base dont dépendent d'autres groupes d'options de sous-profilage et d'autres options.1 Si un profil POSIX.1-2017 n'exige pas qu'une implémentation fournisse un groupe d'options de sous-profilage fournissant des fonctionnalités utilisées par un groupe d'options de sous-profilage (ou une option) requis,2 ce profil doit spécifier3 tous les éléments suivants :
- Comportement restreint ou modifié des interfaces définies dans POSIX.1-2017, susceptible de différer selon l'implémentation du profil.
- Comportements supplémentaires susceptibles de produire des résultats indéfinis ou non spécifiés.
- Comportement supplémentaire défini par l'implémentation que les implémentations doivent documenter dans le document de conformité du profil.
Si l'un des cas ci-dessus résulte du fait que le profil ne requiert pas une interface requise par POSIX.1-2017.
Les règles supplémentaires suivantes s'appliquent à tous les profils POSIX.1-2017 :
- Toute application conforme à ce profil doit également être conforme à POSIX.1-2017, sauf si elle dépend de la définition d'une macro d'indicateur de prise en charge de profil dans <unistd.h> (autrement dit, un profil ne doit pas exiger de comportements restreints, modifiés ou étendus d'une implémentation de POSIX.1-2017).
- Les profils peuvent exiger la définition d'une macro d'indicateur de prise en charge de profil dont le nom commence par _POSIX_AEP_ dans <unistd.h>.
- Les profils doivent exiger la définition de la macro _POSIX_SUBPROFILE dans <unistd.h> pour les implémentations ne répondant pas à toutes les exigences d'une implémentation conforme à POSIX.1.
- Les profils peuvent ajouter des exigences supplémentaires aux limites définies dans <limits.h> et <stdint.h>, sous réserve des conditions suivantes :
- Si la limite est spécifiée comme ayant une valeur fixe, elle ne peut être modifiée par un profil.
- Si une limite est spécifiée comme ayant une valeur minimale ou maximale acceptable, elle peut être modifiée par un profil comme suit :
- Un profil peut augmenter une valeur minimale acceptable, mais ne doit pas la diminuer.
- Un profil peut réduire une valeur maximale acceptable, mais ne doit pas l'augmenter.
- Un profil ne doit pas modifier une limite spécifiée comme ayant une valeur minimale ou maximale en une limite spécifiée comme ayant une valeur fixe.
- Un profil ne doit pas créer de nouvelles limites.
- Toute implémentation conforme à POSIX.1-2017 (y compris toutes les options et limites étendues requises par le profil) doit également être conforme à ce profil, à l'exception de l'omission éventuelle dans <unistd.h> d'une macro d'indicateur de prise en charge de profil requise par le profil.
Pour les limites dans <limits.h> et <stdint.h> :
Groupes d'options XSI
[XSI] Cette section décrit les groupes d'options permettant de prendre en charge la définition de la conformité XSI dans le volume Interfaces système de POSIX.1-2017. Les fonctionnalités décrites dans cette section seront fournies sur les implémentations prenant en charge l'option XSI et le groupe d'options approprié (le reste de cette section n'étant pas détaillé).
Les groupes d'options suivants sont définis :
Cryptage
Le groupe d'options de chiffrement est représenté par la constante symbolique _XOPEN_CRYPT. Il comprend les fonctions suivantes :
Ces fonctions sont marquées CRYPT.
En raison des restrictions d'exportation de l'algorithme de décodage dans certains pays, la disponibilité de ces fonctions peut être limitée pour les implémentations. Toutes les fonctions du groupe d'options de chiffrement peuvent donc renvoyer [ENOSYS] ou, alternativement, encrypt() doit renvoyer [ENOSYS] pour l'opération de déchiffrement.
Une implémentation revendiquant la conformité à ce groupe d'options doit définir _XOPEN_CRYPT sur une valeur autre que -1.
Temps réel
Le groupe d'options Temps réel est représenté par la constante symbolique _XOPEN_REALTIME.
Ce groupe d'options comprend un ensemble de fonctions temps réel issues des options POSIX.1-2017 (voir Options).
Lorsque des fonctions entières sont incluses dans le groupe d'options, la section NAME est marquée avec REALTIME. Lorsqu'une sémantique supplémentaire a été ajoutée à des pages existantes, le nouveau contenu est identifié par la légende de marge appropriée pour l'option sous-jacente définie dans POSIX.1-2017.
Une implémentation revendiquant la conformité à ce groupe d'options doit définir _XOPEN_REALTIME sur une valeur autre que -1.
Ce groupe d'options comprend l'ensemble des options POSIX.1-2017 suivantes (voir Options) :
| Constante | Description |
|---|---|
| _POSIX_FSYNC | Indique la prise en charge de la fonction fsync(), qui force l'écriture des données d'un fichier sur le disque pour garantir leur persistance. |
| _POSIX_MEMLOCK | Indique la prise en charge de la fonction mlock(), permettant de verrouiller une zone de mémoire en RAM afin d'éviter qu'elle soit paginée sur le disque. |
| _POSIX_MEMLOCK_RANGE | Indique la prise en charge de mlock() et munlock() sur une plage spécifique d'adresses mémoire, plutôt que sur l'intégralité du processus. |
| _POSIX_MESSAGE_PASSING | Indique la prise en charge de la communication interprocessus (IPC) par files de messages (mq_open(), mq_send(), mq_receive()). |
| _POSIX_PRIORITIZED_IO | Indique la prise en charge des entrées/sorties prioritaires, permettant aux processus d'effectuer des opérations de lecture/écriture avec des niveaux de priorité. |
| _POSIX_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement basé sur les priorités en temps réel (sched_setscheduler(), sched_getscheduler()). |
| _POSIX_SHARED_MEMORY_OBJECTS | Indique la prise en charge de la mémoire partagée (shm_open(), shm_unlink()), permettant aux processus de partager des segments de mémoire. |
| _POSIX_SYNCHRONIZED_IO | Indique la prise en charge des entrées/sorties synchronisées, garantissant que les données sont réellement écrites sur le support avant que l'écriture ne soit considérée comme terminée. |
Si la constante symbolique _XOPEN_REALTIME est définie pour avoir une valeur autre que -1, alors les constantes symboliques suivantes doivent être définies par l'implémentation pour avoir la valeur 200809L :
| Constante | Description |
|---|---|
| _POSIX_MEMLOCK | Indique la prise en charge de mlock() et munlock(), permettant de verrouiller des segments de mémoire en RAM pour éviter leur pagination sur le disque. |
| _POSIX_MEMLOCK_RANGE | Indique la prise en charge du verrouillage d'une plage spécifique de mémoire avec mlock() et munlock(), au lieu de l'ensemble du processus. |
| _POSIX_MESSAGE_PASSING | Indique la prise en charge de la communication interprocessus via des files de messages (mq_open(), mq_send(), mq_receive()). |
| _POSIX_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement en temps réel basé sur les priorités (sched_setscheduler(), sched_getscheduler()). |
| _POSIX_SHARED_MEMORY_OBJECTS | Indique la prise en charge de la mémoire partagée (shm_open(), shm_unlink()), permettant aux processus de partager des segments de mémoire. |
| _POSIX_SYNCHRONIZED_IO | Indique la prise en charge des entrées/sorties synchronisées, assurant que les données sont réellement écrites sur le support avant que l'écriture ne soit considérée comme terminée. |
La fonctionnalité associée à _POSIX_FSYNC doit toujours être prise en charge sur les systèmes conformes XSI.
La prise en charge de _POSIX_PRIORITIZED_IO sur les systèmes conformes XSI est facultative. Si _POSIX_PRIORITIZED_IO est prise en charge, les opérations d'entrées/sorties désynchronisés effectuées par aio_read(), aio_write() et lio_listio() doivent être soumises avec une priorité égale à la priorité d'ordonnancement de base moins aiocbp->aio_reqprio. Si la planification de l'exécution des processus légers n'est pas prise en charge, la priorité d'ordonnancement de base est celle du processus appelant ; sinon, la priorité d'ordonnancement de base est celle du processus léger appelant. L'implémentation doit également documenter les fichiers pour lesquels la priorisation des entrées/sorties est prise en charge.
Temps réel avancé
Une implémentation revendiquant la conformité à ce groupe d'options doit également prendre en charge le groupe d'options Temps réel.
Lorsque des fonctions entières sont incluses dans le groupe d'options, la section NAME est marquée avec la mention TEMPS RÉEL AVANCÉ. Lorsqu'une sémantique supplémentaire a été ajoutée à des pages existantes, le nouveau contenu est identifié par la légende de marge appropriée pour l'option sous-jacente définie dans POSIX.1-2017.
Ce groupe d'options comprend l'ensemble des options suivantes, issues de POSIX.1-2017 (voir Options) :
| Constante | Description |
|---|---|
| _POSIX_ADVISORY_INFO | Indique la prise en charge des informations sur les verrous et les verrous de fichier dans le contexte de la gestion des fichiers, permettant des notifications pour des verrous partagés ou exclusifs. |
| _POSIX_CPUTIME | Indique la prise en charge de la surveillance de l'utilisation du temps processeur par un processus à l'aide de la fonction times(), permettant de mesurer le temps d'exécution. |
| _POSIX_MONOTONIC_CLOCK | Indique la prise en charge d'un horodatage basé sur un compteur de temps monotone (ne pouvant que croître), souvent utilisé pour mesurer des intervalles de temps sans être affecté par les modifications de l'heure système. |
| _POSIX_SPAWN | Indique la prise en charge de la fonction posix_spawn(), utilisée pour créer de nouveaux processus en remplacement des fonctions fork() et exec(), avec des options supplémentaires de contrôle. |
| _POSIX_SPORADIC_SERVER | Indique la prise en charge du serveur sporadique, un modèle de gestion de l'exécution des tâches qui permet des exécutions périodiques et irrégulières en fonction de la priorité. |
| _POSIX_TYPED_MEMORY_OBJECTS | Indique la prise en charge des objets de mémoire typés (comme ceux créés avec mmap()), permettant un contrôle et une manipulation plus fins de la mémoire partagée entre les processus. |
Si l'implémentation prend en charge le groupe d'options en temps réel avancé, les constantes symboliques suivantes doivent être définies par l'implémentation pour avoir la valeur 200809L :
| Constante | Description |
|---|---|
| _POSIX_ADVISORY_INFO | Indique la prise en charge des mécanismes de gestion des informations sur les verrous pour les fichiers, en permettant des verrous consultatifs afin d'éviter des conflits d'accès concurrentiels. |
| _POSIX_CPUTIME | Indique la prise en charge de la fonction times() permettant de mesurer le temps CPU utilisé par un processus, souvent pour analyser l'efficacité d'un programme. |
| _POSIX_MONOTONIC_CLOCK | Indique la prise en charge d'un horloge monotone avançant de manière continue et n'est pas affectée par les changements d'heure système, souvent utilisée pour mesurer des intervalles de temps. |
| _POSIX_SPAWN | Indique la prise en charge de la fonction posix_spawn(), qui permet de créer de nouveaux processus avec des options supplémentaires, et souvent comme alternative à fork() et exec(). |
| _POSIX_SPORADIC_SERVER | Indique la prise en charge des serveurs sporadiques, un modèle de gestion de l'exécution des tâches qui permet des exécutions périodiques et irrégulières, adapté à des systèmes à forte priorité. |
| _POSIX_TYPED_MEMORY_OBJECTS | Indique la prise en charge des objets de mémoire typés dans un espace mémoire partagé, permettant une gestion plus précise des blocs de mémoire dans des contextes interprocessus. |
Si la constante symbolique _POSIX_SPORADIC_SERVER est définie, la constante symbolique _POSIX_PRIORITY_SCHEDULING doit également être définie par l'implémentation avec la valeur 200809L.
Processus légers en temps réel
Le groupe d'options des processus légers en temps réel est représenté par la constante symbolique _XOPEN_REALTIME_THREADS.
Ce groupe d'options comprend les options suivantes, issues de POSIX.1-2017 (voir Options) :
| Constante | Description |
|---|---|
| _POSIX_THREAD_PRIO_INHERIT | Indique la prise en charge de l'héritage de la priorité des processus légers. Lorsque ce mécanisme est activé, les processus légers attendant un verrou héritent de la priorité du processus léger détenant ce verrou. |
| _POSIX_THREAD_PRIO_PROTECT | Indique la prise en charge de la protection de la priorité des processus légers. Ce mécanisme empêche la priorité d'un processus léger de diminuer lorsque ce dernier détient un verrou, afin d'éviter des inversions de priorité. |
| _POSIX_THREAD_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement des processus légers basé sur les priorités. Cela permet de contrôler l'ordre d'exécution des processus légers en fonction de leurs priorités respectives. |
| _POSIX_THREAD_ROBUST_PRIO_INHERIT | Indique la prise en charge de l'héritage robuste de la priorité des processus légers. Cela s'applique dans les systèmes qui utilisent la gestion robuste des verrous, garantissant que la priorité d'un processus léger est héritée de manière sûre en cas de défaillance. |
| _POSIX_THREAD_ROBUST_PRIO_PROTECT | Indique la prise en charge de la protection robuste de la priorité des processus légers. Cela protège la priorité des processus légers lors de l'acquisition de verrous dans les systèmes où la gestion robuste des verrous est utilisée, évitant ainsi les inversions de priorité. |
Le cas échéant, des pages entières sont marquées «TRANSACTIONS EN TEMPS RÉEL», accompagnées de la légende de marge d'option appropriée pour la section SYNOPSIS (voir Codes).
Une implémentation revendiquant la conformité à ce groupe d'options doit définir _XOPEN_REALTIME_THREADS sur une valeur autre que -1.
Si le symbole _XOPEN_REALTIME_THREADS est défini avec une valeur autre que -1, les options suivantes doivent également être définies par l'implémentation avec la valeur 200809L :
| Constante | Description |
|---|---|
| _POSIX_THREAD_PRIO_INHERIT | Indique la prise en charge de l'héritage de la priorité des processus léger. Lorsque ce mécanisme est activé, un processus léger héritera de la priorité d'un autre processus léger si ce dernier détient un verrou que le premier processus courant souhaite acquérir. |
| _POSIX_THREAD_PRIO_PROTECT | Indique la prise en charge de la protection de la priorité des processus légers. Cela empêche un processus léger de voir sa priorité diminuée lorsqu'il détient un verrou, garantissant ainsi que la priorité du processus léger est protégée contre les inversions de priorité. |
| _POSIX_THREAD_PRIORITY_SCHEDULING | Indique la prise en charge de l'ordonnancement des processus légers basé sur leurs priorités. Cela permet aux systèmes de planifier l'exécution des processus légers en fonction de leur niveau de priorité. |
| _POSIX_THREAD_ROBUST_PRIO_INHERIT | Indique la prise en charge de l'héritage robuste de la priorité des processus légers dans les systèmes où les verrous sont gérés de manière robuste, assurant que les priorités des processus légers sont héritées de façon fiable même en cas de défaillance. |
| _POSIX_THREAD_ROBUST_PRIO_PROTECT | Indique la prise en charge de la protection robuste de la priorité des processus légers. Cela empêche la priorité d'un processus léger d'être affectée lorsqu'il détient un verrou dans un environnement avec gestion robuste des verrous. Cela prévient les inversions de priorité. |
Processus léger temps réel avancés
Une implémentation revendiquant la conformité à ce groupe d'options doit également prendre en charge le groupe d'options Processus légers temps réel.
Lorsque des fonctions entières sont incluses dans le groupe d'options, la section NAME est marquée avec la mention PROCESSUS LEGER TEMPS RÉEL AVANCÉS. Lorsque des sémantiques supplémentaires ont été ajoutées à des pages existantes, le nouveau contenu est identifié par la légende de marge appropriée pour l'option sous-jacente définie dans POSIX.1-2017.
Ce groupe d'options comprend l'ensemble des options suivantes, issues de POSIX.1-2017 (voir Options) :
| Constante | Description |
|---|---|
| _POSIX_THREAD_CPUTIME | Indique la prise en charge du suivi du temps CPU utilisé par un processus léger. Ce mécanisme permet de mesurer le temps d'exécution d'un processus léger en particulier, en utilisant des fonctions comme clock() ou pthread_getcpuclockid(). |
| _POSIX_THREAD_SPORADIC_SERVER | Indique la prise en charge du modèle de serveur sporadique pour les processus légers. Ce modèle permet d'exécuter des tâches de manière irrégulière, mais en tenant compte des priorités et des contraintes temporelles spécifiques, souvent utilisé dans les systèmes embarqués ou les systèmes en temps réel. |
Si la constante symbolique _POSIX_THREAD_SPORADIC_SERVER est définie avec la valeur 200809L, la constante symbolique _POSIX_THREAD_PRIORITY_SCHEDULING doit également être définie par l'implémentation avec la valeur 200809L.
Si l'implémentation prend en charge le groupe d'options Advanced Realtime Threads, les constantes symboliques suivantes doivent être définies par l'implémentation avec la valeur 200809L :
| Constante | Description |
|---|---|
| _POSIX_THREAD_CPUTIME | Indique la prise en charge de l'utilisation du temps processeur par un processus léger spécifique. Cela permet de mesurer le temps CPU consommé par un processus léger, en utilisant des fonctions comme pthread_getcpuclockid() et clock_gettime(). |
| _POSIX_THREAD_SPORADIC_SERVER | Indique la prise en charge d'un modèle de serveur sporadique pour les processus légers. Ce modèle est utilisé dans les systèmes temps réel, où un processus léger peut être exécuté de manière sporadique en fonction des priorités et des conditions de planification. |
Traçage
Ce groupe d'options comprend un ensemble de fonctions de traçage issues des options de POSIX.1-2017 (voir Options).
Lorsque des fonctions complètes sont incluses dans le groupe d'options, la section NAME est marquée avec TRACING. Lorsque des sémantiques supplémentaires ont été ajoutées à des pages existantes, le nouveau contenu est identifié par la légende de marge appropriée à l'option sous-jacente définie dans POSIX.1-2017.
Ce groupe d'options comprend l'ensemble des options suivantes de POSIX.1-2017 (voir Options) :
| Constante | Description |
|---|---|
| _POSIX_TRACE | Indique la prise en charge des mécanismes de traçabilité dans le système, permettant de suivre l'exécution des processus, des processus légers et des événements du système pour des fins de diagnostic et de performance. |
| _POSIX_TRACE_EVENT_FILTER | Indique la prise en charge de la possibilité d'appliquer des filtres sur les événements traçables, permettant de spécifier quels événements doivent être capturés et enregistrés, facilitant ainsi une analyse ciblée. |
| _POSIX_TRACE_LOG | Indique la prise en charge de la journalisation des événements de trace, permettant d'enregistrer et de stocker les informations collectées lors de l'exécution des processus ou des processus légers pour une analyse ultérieure. |
| _POSIX_TRACE_INHERIT | Indique la prise en charge de l'héritage des paramètres de traçabilité d'un processus parent vers ses processus enfants, garantissant la continuité du suivi des événements sur toute la hiérarchie des processus. |
Si l'implémentation prend en charge le groupe d'options de traçage, les constantes symboliques suivantes doivent être définies par l'implémentation pour avoir la valeur 200809L :
| Constante | Description |
|---|---|
| _POSIX_TRACE | Indique la prise en charge du système de traçabilité des événements dans le système POSIX, permettant de suivre et d'analyser les activités des processus, comme les appels systèmes et les interactions entre les processus. |
| _POSIX_TRACE_EVENT_FILTER | Indique la prise en charge de la possibilité de filtrer les événements de trace. Cela permet de spécifier quels types d'événements doivent être capturés pour la traçabilité, offrant ainsi un contrôle précis sur les données enregistrées. |
| _POSIX_TRACE_LOG | Indique la prise en charge de la journalisation des événements de trace. Cela permet de stocker les informations sur les événements capturés dans des fichiers journaux, facilitant l'analyse et le diagnostic ultérieur. |
| _POSIX_TRACE_INHERIT | Indique la prise en charge de l'héritage des paramètres de traçabilité d'un processus parent vers ses processus enfants. Cela garantit que la traçabilité est maintenue à travers la hiérarchie des processus. |
XSI STREAMS (Flux XSI)
[OB XSR] Cette section décrit le groupe d'options XSI STREAMS, représenté par la constante symbolique _XOPEN_STREAMS. Les fonctionnalités décrites dans cette section sont disponibles pour les implémentations prenant en charge l'option XSI STREAMS (le reste de cette section n'est pas détaillé).
Ce groupe d'options inclut les fonctionnalités liées à STREAMS, un mécanisme uniforme pour la mise en oeuvre de services réseau et d'autres d'entrées/sorties basées sur des caractères, comme décrit dans XSH STREAMS.
Il inclut les fonctions suivantes :
| Fonction | Description |
|---|---|
| fattach() | Attache un flux de données à un descripteur de fichier pour l'utiliser avec des canaux de communication inter-processus (IPC) dans des systèmes qui supportent des flux. |
| fdetach() | Détache un flux de données précédemment attaché à un descripteur de fichier, ce qui permet de libérer le descripteur pour d'autres utilisations. |
| getmsg() | Permet de recevoir un message depuis un canal de communication en utilisant des descripteurs de fichiers. Utilisé dans les systèmes de communication basés sur les messages. |
| getpmsg() | Semblable à getmsg(), mais utilisée pour recevoir un message avec des informations supplémentaires sur les priorités dans les messages en file d'attente. |
| ioctl() | Permet d'envoyer des commandes de contrôle spécifiques à un périphérique ou à un fichier spécial, comme des configurations de périphériques ou des ajustements de comportement de fichiers. |
| isastream() | Vérifie si un descripteur de fichier est associé à un flux (stream), ce qui est utilisé dans les communications basées sur des flux dans les systèmes UNIX. |
| putmsg() | Permet d'envoyer un message sur un flux en utilisant des descripteurs de fichier, souvent dans des systèmes de communication inter-processus. |
| putpmsg() | Semblable à putmsg(), mais permet d'envoyer un message avec des informations supplémentaires sur les priorités des messages dans les systèmes de messagerie. |
et l'entête <stropts.h>.
Le cas échéant, les pages entières sont marquées FLUX, avec la légende de marge d'option appropriée pour la section SYNOPSIS (voir Codes). Lorsqu'une sémantique supplémentaire a été ajoutée à des pages existantes, le nouveau contenu est identifié par la légende de marge appropriée pour l'option sous-jacente définie dans POSIX.1-2017.
Une implémentation revendiquant la conformité à ce groupe d'options doit définir _XOPEN_STREAMS sur une valeur autre que -1.
Options
Les constantes symboliques définies dans <unistd.h>, Constantes pour les options et les groupes d'options, reflètent les options d'implémentation de POSIX.1-2017. Ces symboles permettent à l'application de déterminer laquelle des trois catégories de prise en charge des fonctionnalités optionnelles est fournie par l'implémentation.
- Option not supported for compilation (Option non prise en charge à la compilation) : L'implémentation indique à la compilation (en définissant la constante dans <unistd.h> avec la valeur -1 ou en la laissant indéfinie) que l'option n'est pas prise en charge à la compilation et, lors de la compilation, à l'exécution. Dans ce cas, les en-têtes, types de données, interfaces de fonction et utilitaires requis uniquement pour l'option n'ont pas besoin d'être présents. Une vérification ultérieure à l'exécution, à l'aide des fonctions fpathconf(), pathconf() ou sysconf définies dans le volume « Interfaces système » de POSIX.1-2017, ou de l'utilitaire getconf défini dans le volume « Shell et Utilitaires » de POSIX.1-2017, peut, dans certains cas, indiquer que l'option est prise en charge à l'exécution. (Par exemple, un ancien binaire d'application peut être exécuté sur une implémentation plus récente à laquelle la prise en charge de l'option a été ajoutée.)
- Option always supported (Option toujours prise en charge)&nbps;: L'implémentation indique à la compilation (en définissant la constante dans <unistd.h> avec une valeur supérieure à zéro) que l'option est prise en charge à la fois pour la compilation et pour l'exécution. Dans ce cas, tous les entêtes, types de données, interfaces de fonction et utilitaires requis uniquement pour l'option doivent être disponibles et fonctionner comme spécifié. Les vérifications à l'exécution avec fpathconf(), pathconf() ou sysconf doivent indiquer que l'option est prise en charge.
- Option might or might not be supported at runtime (L'option peut être prise en charge ou non à l'exécution) : L'implémentation indique à la compilation (en définissant la constante dans <unistd.h> avec la valeur zéro) que l'option est prise en charge à la compilation et peut être prise en charge ou non à l'exécution. Dans ce cas, les fonctions fpathconf(), pathconf() ou sysconf() définies dans le volume « Interfaces système » de POSIX.1-2017, ou l'utilitaire getconf défini dans le volume «Shell et Utilitaires» de POSIX.1-2017, peuvent être utilisées pour récupérer la valeur de chaque symbole sur chaque implémentation spécifique afin de déterminer si l'option est prise en charge à l'exécution. Tous les entêtes, types de données et interfaces de fonction nécessaires à la compilation et à l'exécution des applications utilisant l'option à l'exécution (après vérification de sa prise en charge) doivent être fournis. Toutefois, si l'option n'est pas prise en charge à l'exécution, leur fonctionnement n'est pas requis. Les utilitaires ou autres fonctionnalités nécessaires uniquement à l'option, mais non nécessaires à la compilation et à l'exécution de ces applications, ne sont pas nécessaires.
Si une option n'est pas prise en charge à la compilation, une application tentant d'utiliser un élément associé uniquement à cette option est considérée comme nécessitant une extension. Sauf indication contraire explicite, le comportement des fonctions associées à une option non prise en charge à l'exécution n'est pas spécifié, et une application utilisant ces fonctions sans avoir préalablement vérifié fpathconf(), pathconf() ou sysconf est considérée comme nécessitant une extension.
Des codes de marge sont définis pour chaque option (voir Codes).
Interfaces système
Consultez <unistd.h>, Constantes pour les options et les groupes d'options pour la liste des options.
Interpréteur de commande et utilitaires
Chacun de ces symboles doit être considéré comme un nom valide par l'implémentation. Consultez <unistd.h>, Constantes pour les options et les groupes d'options.
Les noms littéraux indiqués ci-dessous s'appliquent uniquement à l'utilitaire getconf.
| Nom | Description |
|---|---|
| POSIX2_C_DEV | [CD] Le système prend en charge l'option Utilitaires de développement en langage C. Les utilitaires de l'option Utilitaires de développement en langage C sont utilisés pour le développement d'applications en langage C, notamment la compilation ou la traduction de code source C, ainsi que pour la création de générateurs de programmes complexes pour des tâches lexicales simples et le traitement de grammaires hors contexte. Les utilitaires listés ci-dessous peuvent être fournis par un système conforme ; toutefois, tout système se déclarant conforme à l'option Utilitaires de développement en langage C doit fournir tous les utilitaires listés.
|
| POSIX2_CHAR_TERM | Le système prend en charge l'option «Caractéristiques du terminal». Cette valeur n'a pas besoin d'être présente sur un système ne prenant pas en charge
l'option « Utilitaires de portabilité utilisateur». Le cas échéant, la dépendance est indiquée dans la description de l'utilitaire. Cette option s'applique uniquement aux systèmes prenant en charge l'option « Utilitaires de portabilité utilisateur ». Si elle est prise en charge, le système prend en charge au moins un type de terminal capable d'effectuer toutes les opérations décrites dans POSIX.1-2017 ; voir « Périphériques de sortie et types de terminaux ». |
| POSIX2_FORT_DEV | [FD] Le système prend en charge l'option Utilitaires de développement FORTRAN. Le compilateur FORTRAN fort77 est le seul utilitaire de l'option Utilitaires de développement FORTRAN. Il est utilisé pour le développement d'applications en langage FORTRAN, y compris la compilation ou la traduction de code source FORTRAN. L'utilitaire fort77 peut être fourni par un système conforme ; cependant, tout système se déclarant conforme à l'option Utilitaires de développement FORTRAN doit le fournir. |
| POSIX2_FORT_RUN | [FR] Le système prend en charge l'option Utilitaires d'exécution FORTRAN. L'utilitaire asa est le seul utilitaire de l'option Utilitaires d'exécution FORTRAN. L'utilitaire asa peut être fourni par un système conforme ; cependant, tout système se déclarant conforme à l'option Utilitaires d'exécution FORTRAN doit le fournir. |
| POSIX2_LOCALEDEF | Le système prend en charge l'option Utilitaires de création de paramètres régionaux. Si cette option est prise en charge, le système prend en charge la création de paramètres régionaux comme décrit dans l'utilitaire localedef. L'utilitaire localedef peut être fourni par un système conforme ; cependant, tout système prétendant être conforme à l'option Utilitaires de création de paramètres régionaux doit fournir l'utilitaire localedef. |
| POSIX2_PBS | [OB BE] Le système prend en charge l'option Services et utilitaires d'environnement Batch (voir Services d'environnement Batch XCU). Remarque : L'option Services et utilitaires d'environnement Batch est une combinaison de services et utilitaires Batch obligatoires et facultatifs. La constante symbolique POSIX_PBS implique que le système prend en charge tous les services et utilitaires Batch obligatoires. |
| POSIX2_PBS_ACCOUNTING | Le système prend en charge l'option de comptabilité par lots. |
| POSIX2_PBS_CHECKPOINT | Le système prend en charge l'option Point de contrôle/Redémarrage par lots. |
| POSIX2_PBS_LOCATE | Le système prend en charge l'option Localiser la demande de travail par lots. |
| POSIX2_PBS_MESSAGE | Le système prend en charge l'option de demande de message de travail par lots. |
| POSIX2_PBS_TRACK | Le système prend en charge l'option Suivi des demandes de tâches par lots. |
| POSIX2_SW_DEV | [SD] Le système prend en charge l'option Utilitaires de développement logiciel. Les utilitaires de l'option Utilitaires de développement logiciel servent au développement d'applications, notamment à la compilation ou à la traduction de code source, à la création et à la maintenance d'archives de bibliothèques, ainsi qu'à la maintenance de groupes de programmes interdépendants. Les utilitaires listés ci-dessous peuvent être fournis par le système conforme ; toutefois, tout système se déclarant conforme à l'option Utilitaires de développement logiciel doit fournir tous les utilitaires listés ici.
|
| POSIX2_UPE | [UP] Le système prend en charge l'option Utilitaires de portabilité utilisateur. Les utilitaires de l'option Utilitaires de portabilité utilisateur doivent être implémentés sur tous les systèmes se déclarant conformes à cette option, à l'exception de l'utilitaire vi, dont les fonctionnalités ne peuvent pas être implémentées sur tous les types de terminaux. Si l'option POSIX2_CHAR_TERM est prise en charge, le système doit prendre en charge toutes ces fonctionnalités sur au moins un type de terminal ; voir Périphériques de sortie et types de terminaux. La liste des utilitaires de l'option Utilitaires de portabilité utilisateur est la suivante :
|
| XOPEN_UNIX | [XSI] Le système prend en charge l'option X/Open System Interfaces (XSI) (voir Conformité XSI). |
| XOPEN_UUCP | [UU] Le système prend en charge l'option Utilitaires UUCP. La liste des utilitaires de l'option Utilitaires UUCP est la suivante :
|
Conformité des applications
Conformément à POSIX.1-2017, les exigences de conformité des applications décrites dans cette section s'appliquent.
Toutes les applications revendiquant la conformité à POSIX.1-2017 doivent utiliser exclusivement les services dépendants du langage C décrits dans la section « Services dépendants du langage C », utiliser exclusivement les utilitaires et fonctionnalités définis dans le volume « Shell et Utilitaires » de POSIX.1-2017 et appartenir à l'une des catégories suivantes.
Application POSIX strictement conforme
Une application POSIX strictement conforme est une application qui requiert uniquement les fonctionnalités décrites dans POSIX.1-2017. Une telle application :
- Doit accepter tout comportement d'implémentation résultant d'actions entreprises dans les domaines décrits dans POSIX.1-2017 comme étant définis par l'implémentation ou non spécifiés, ou lorsque POSIX.1-2017 indique que les implémentations peuvent varier.
- Ne doit pas exécuter d'actions décrites comme produisant des résultats non définis.
- Pour les constantes symboliques, doit accepter toute valeur comprise dans la plage autorisée par POSIX.1-2017, mais ne doit pas se fier à une valeur supérieure aux minimums indiqués ou inférieure aux maximums indiqués dans POSIX.1-2017.
- Ne doit pas utiliser de fonctionnalités désignées comme obsolètes.
- Doit tolérer et être autorisé à s'adapter à la présence ou à l'absence de fonctionnalités optionnelles dont la disponibilité est indiquée par POSIX Conformance.
- Pour le langage de programmation C, ne doit pas produire de sortie dépendant d'un comportement décrit dans la norme ISO/IEC 9899:1999 comme étant non spécifié, non défini ou défini par l'implémentation, sauf si le volume Interfaces système de POSIX.1-2017 le spécifie. Comportement
- Pour le langage de programmation C, ne pas dépasser la limite d'implémentation minimale définie dans la norme ISO/IEC 9899:1999, sauf si le volume Interfaces système de POSIX.1-2017 spécifie une limite d'implémentation minimale supérieure.
- Pour le langage de programmation C, définir _POSIX_C_SOURCE à 200809L avant l'inclusion de tout en-tête.
Dans POSIX.1-2017, toute restriction imposée à une application POSIX conforme doit restreindre une application POSIX strictement conforme.
Application POSIX conforme
Application POSIX conforme ISO/CEI
Une application POSIX conforme ISO/CEI utilise uniquement les fonctionnalités décrites dans POSIX.1-2017 et les liaisons de langage conformes approuvées pour toute norme ISO ou CEI. Une telle application doit inclure une déclaration de conformité documentant toutes les options et les dépendances de limites, ainsi que toutes les autres normes ISO ou CEI utilisées.
Application POSIX conforme <Organisme national>
Une application POSIX conforme <Organisme national> diffère d'une application POSIX conforme ISO/CEI en ce qu'elle peut également utiliser des normes spécifiques d'un seul organisme membre ISO/CEI, désigné ici par <Organisme national>. Une telle application doit inclure une déclaration de conformité documentant toutes les options et les dépendances de limites, ainsi que toutes les autres normes <Organisme national> utilisées.
Application POSIX conforme utilisant des extensions
Une application POSIX conforme utilisant des extensions diffère d'une application POSIX conforme uniquement par l'utilisation de fonctionnalités non standard, conformes à POSIX.1-2017. Une telle application doit documenter intégralement ses exigences relatives à ces fonctionnalités étendues, en plus de la documentation requise pour une application POSIX conforme. Une application POSIX conforme utilisant des extensions doit être soit une application POSIX conforme à la norme ISO/CEI utilisant des extensions, soit une application POSIX conforme à la norme <Organisme national> utilisant des extensions (voir Application POSIX conforme à la norme ISO/CEI et Application POSIX conforme à la norme <Organisme national>).
Application XSI strictement conforme
Une application XSI strictement conforme est une application nécessitant uniquement les fonctionnalités décrites dans POSIX.1-2017. Une telle application :
- Doit accepter tout comportement d'implémentation résultant d'actions entreprises dans les domaines décrits dans POSIX.1-2017 comme étant définis par l'implémentation ou non spécifiés, ou lorsque POSIX.1-2017 indique que les implémentations peuvent varier.
- Ne doit pas exécuter d'actions décrites comme produisant des résultats non définis.
- Pour les constantes symboliques, doit accepter toute valeur comprise dans la plage autorisée par POSIX.1-2017, mais ne doit pas se fier à une valeur supérieure aux minimums indiqués ou inférieure aux maximums indiqués dans POSIX.1-2017.
- Ne doit pas utiliser de fonctionnalités désignées comme obsolètes.
- Doit tolérer et être autorisée à s'adapter à la présence ou à l'absence de fonctionnalités optionnelles dont la disponibilité est indiquée par la conformité XSI.
- Pour le langage de programmation C, ne doit pas produire de sortie dépendant d'un comportement décrit dans la norme ISO C comme étant non spécifié, non défini ou défini par l'implémentation, sauf si le volume Interfaces système de POSIX.1-2017 spécifie ce comportement.
- Pour le langage de programmation C, ne doit pas dépasser Limite minimale d'implémentation définie dans la norme ISO C, sauf si le volume Interfaces système de POSIX.1-2017 spécifie une limite minimale d'implémentation supérieure.
- Pour le langage de programmation C, la valeur de _XOPEN_SOURCE doit être définie à 700 avant l'inclusion d'un entête.
Dans POSIX.1-2017, toute restriction imposée à une application POSIX conforme doit restreindre une application XSI strictement conforme.
Application XSI conforme utilisant des extensions
Une application XSI conforme utilisant des extensions diffère d'une application XSI strictement conforme uniquement par l'utilisation de fonctionnalités non standard, conformes à POSIX.1-2017. Une telle application doit documenter intégralement ses exigences relatives à ces fonctionnalités étendues, en plus de la documentation requise pour une application XSI strictement conforme.
Services dépendants du langage pour le langage de programmation C
Les développeurs souhaitant revendiquer la conformité à la norme ISO C doivent revendiquer la conformité POSIX comme décrit dans la section Conformité POSIX.
Autres spécifications relatives aux langages
POSIX.1-2017 est actuellement spécifié en termes de langage de commande de l'interpréteur de commande et d'ISO C. Des liaisons avec d'autres langages de programmation sont en cours de développement.
Si la conformité à POSIX.1-2017 est revendiquée pour l'implémentation d'un langage de programmation, celui-ci doit prendre en charge l'utilisation de symboles externes distincts d'au moins 31 octets dans le texte source du programme. (C'est-à-dire que les identifiants qui diffèrent au moins jusqu'au trente et unième octet doivent être distincts.) Si une norme nationale ou internationale régissant un langage définit une longueur maximale inférieure à cette valeur, la longueur maximale définie par le langage doit être prise en charge. Les symboles externes qui ne diffèrent que par la casse doivent être distincts lorsque l'ensemble de caractères utilisé distingue les majuscules des minuscules et que le langage autorise (ou exige) que les majuscules et les minuscules soient distinctes dans les symboles externes.