Interface utilisateur
Le pilote log est ouvert à l'aide de l'interface clone, /dev/slog.
Chaque ouverture de /dev/slog obtient un flux distinct pour le journal. Pour recevoir des messages de journal , un processus doit d'abord indiquer au pilote log s'il s'agit d'un consignateur d'erreurs ou d'un consignateur de trace à l'aide d'une opération I_STR .
Pour le consignateur d'erreurs, l'opération I_STR a la valeur de paramètre ic_cmd I_ERRLOG sans données associées.
Pour le consignateur de trace, l'opération I_STR a la valeur de paramètre ic_cmd I_TRCLOGet doit être accompagnée d'une mémoire tampon de données contenant un tableau d'une ou de plusieurs structures trace_ids . Chaque structure trace_ids spécifie une zone de milieu, de SID et de niveau à partir de laquelle les messages sont acceptés. La sous-routine strlog accepte les messages dont les valeurs des zones mid et sid correspondent exactement à celles de la structure trace_ids et dont le niveau est inférieur ou égal au niveau indiqué dans la structure trace_ids . Une valeur de -1 dans l'un des champs de la structure trace_ids indique que toute valeur est acceptée pour ce champ.
Au maximum, un consignateur de trace et un consignateur d'erreurs peuvent être actifs à la fois. Une fois que le processus de consignateur s'est identifié à l'aide de l'opération ioctl , le pilote log commence à envoyer des messages, sous réserve des restrictions précédemment indiquées. Ces messages sont obtenus à l'aide de l'appel système getmsg . La partie contrôle de ce message contient une structure log_ctl , qui spécifie les zones mid, sid, level et flags, ainsi que le temps en graduations depuis l'amorçage du message, le temps correspondant en secondes depuis le 1er janvier 1970 et un numéro de séquence. La durée en secondes depuis 1970 est fournie pour que la date et l'heure du message puissent être facilement calculées ; la durée en graduations depuis l'amorçage est fournie pour que la temporisation relative des messages du journal puisse être déterminée.
Des numéros de séquence différents sont conservés pour les flux de consignation des erreurs et de consignation des traces afin que les écarts dans la séquence des messages puissent être déterminés. (En cas de trafic de messages élevé, certains messages peuvent ne pas être distribués par le consignateur pour éviter de bloquer les ressources système.) La partie données du message contient le texte non développé de la chaîne de format (caractères null-terminés), suivi des arguments de la chaîne de format (jusqu'au nombre spécifié par la valeur NLOGARGS ), alignés sur la limite du premier mot suivant la chaîne de format.
Un processus peut également envoyer un message de même structure au pilote log , même s'il ne s'agit pas d'un consignateur d'erreurs ou de traces. Les seules zones de la structure log_ctl dans la partie contrôle du message qui sont acceptées sont les zones de niveau et d'indicateur. Toutes les autres zones sont renseignées par le pilote log avant d'être transférées au consignateur approprié. La partie données doit contenir une chaîne de format à terminaison nulle et tous les arguments (jusqu'à NLOGARGS) doivent être condensés d'un mot chacun, à la limite de mot suivante après la fin de la chaîne de format.
La tentative d'émission d'une opération I_TRCLOG ou I_ERRLOG alors qu'un processus de consignation du type indiqué existe déjà entraîne le renvoi de l'erreur ENXIO . De même, ENXIO est renvoyé pour les opérations I_TRCLOG sans aucune structure trace_ids ou pour les opérations I_STR non reconnues. Les messages de journal incorrectement formatés envoyés au pilote par un processus utilisateur sont ignorés en mode silencieux (aucun résultat d'erreur).