mq_open(3) Library Functions Manual mq_open(3) NOM mq_open - Ouvrir une file de messages BIBLIOTHEQUE Bibliotheque de temps reel (librt, -lrt) SYNOPSIS #include /* Pour les constantes O_* */ #include /* Pour les constantes des modes */ #include mqd_t mq_open(const char *nom, int oflag); mqd_t mq_open(const char *nom, int oflag, mode_t mode, struct mq_attr *attr); DESCRIPTION La fonction mq_open() cree une nouvelle file de messages POSIX, ou ouvre une file de messages existante. La file est identifiee par nom. Pour plus de details sur la construction de nom, consulter mq_overview(7). L'argument oflag specifie les drapeaux qui controlent l'operation d'appel (les definitions des valeurs des attributs peuvent etre obtenues en incluant ). Un unique drapeau parmi les suivants doit etre specifie dans oflag : O_RDONLY Ouvrir une file pour seulement recevoir des messages. O_WRONLY Ouvrir une file pour seulement envoyer des messages. O_RDWR Ouvrir une file pour soit envoyer, soit recevoir des messages. Zero ou plusieurs des drapeaux suivants peuvent etre ajoutes avec un ou binaire dans oflag : O_CLOEXEC (depuis Linux 2.6.26) Regler le drapeau << close-on-exec >> pour le descripteur de file de messages. Consulter open(2) pour une discussion sur l'utilite de ce drapeau. O_CREAT Creer la file de messages si elle n'existe pas. Le proprietaire de la file de messages est defini a l'UID du processus appelant, il en est de meme pour le GID. O_EXCL Si O_CREAT est specifie dans oflag, et si une file de nom name existe deja, alors elle echouera et renverra le code d'erreur EEXIST. O_NONBLOCK Ouvrir une file en mode non bloquant. Dans de telles circonstances ou mq_receive(3) et mq_send(3) devraient etre normalement bloquantes, ces fonctions echoueront avec le code d'erreur EAGAIN. Si O_CREAT est specifie dans oflag, alors deux arguments additionnels doivent etre specifies. L'argument mode specifie les permissions de la nouvelle file, comme pour open(2) (les definitions symboliques des bits de permissions peuvent etre obtenues en incluant ). La definition des permissions est masquee avec l'<< umask >> du processus. Les champs des struct mq_attr pointes vers attr specifient le nombre maximal de messages et la taille maximale des messages que la file permettra. Cette structure est definie comme suit : struct mq_attr { long mq_flags; /* Drapeaux (ignore pour mq_open()) */ long mq_maxmsg; /* Max. # de messages dans la file */ long mq_msgsize; /* Max de la taille du message (octets) */ long mq_curmsgs; /* # de messages actuellement dans la file */ (ignore pour mq_open()) */ }; Seuls les champs mq_maxmsg et mq_msgsize sont employes lors de l'appel de mq_open() ; les valeurs dans les champs restants sont ignorees. Si attr est NULL, alors la file est creee avec les attributs par defaut definis par l'implementation. Depuis Linux 3.5, deux fichiers de /proc peuvent etre utilises pour controler ces valeurs par defaut ; consulter mq_overview(7) pour plus de details. VALEUR RENVOYEE En cas de succes, mq_open() renvoie un descripteur de file de messages a utiliser avec les autres fonctions des files de messages. En cas d'erreur, mq_open() renvoie (mqd_t) -1, avec errno definie. ERREURS EACCES La file existe mais l'appelant n'a pas les permissions pour l'ouvrir dans le mode specifie. EACCES name contient plus d'un caratere << / >>. EEXIST O_CREAT et O_EXCL sont specifies dans oflag, mais une file avec le meme nom existe deja. EINVAL nom ne suit pas le format de mq_overview(7). EINVAL O_CREAT etait specifie dans oflag, et attr etait non NULL, mais attr->mq_maxmsg ou attr->mq_msqsize n'etait pas valable. Ces deux champs doivent etre superieurs a zero. Avec un processus non privilegie (qui n'a pas la capacite CAP_SYS_RESOURCE), attr->mq_maxmsg doit etre inferieur ou egal a la limite msg_max, et attr->mq_msgsize doit etre inferieur ou egal a la limite msgsize_max. En plus, meme avec un processus privilegie, attr->mq_maxmsg ne peut pas etre plus grand que la limite HARD_MAX. Consulter mq_overview(7) pour les details sur ces limites. EMFILE La limite par processus du nombre de fichiers ouverts et de descripteurs de file de messages a ete atteinte (voir la description de RLIMIT_NOFILE dans getrlimit(2)). ENAMETOOLONG nom est trop long. ENFILE La limite a l'echelle du systeme du nombre total de fichiers ouverts et de files de messages a ete atteinte. ENOENT Le drapeau O_CREAT n'a pas ete specifie dans oflag, et aucune file avec le nom name n'existe. ENOENT name est juste << / >> suivi d'aucun autre caractere. ENOMEM Memoire insuffisante. ENOSPC Pas assez d'espace pour la creation de la nouvelle file de messages. Ceci s'est probablement produit car la limite queues_max a ete atteinte ; consulter mq_overview(7). ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |mq_open() | Securite des threads | MT-Safe | +---------------------------------+--------------------------+---------+ VERSIONS Differences entre bibliotheque C et noyau La fonction de bibliotheque mq_open() est implementee au-dessus de l'appel systeme du meme nom. Elle realise la verification que le nom commence par une barre oblique (/), produisant une erreur EINVAL si ce n'est pas le cas. L'appel systeme du noyau s'attend a ce que le nom ne contienne pas de barre oblique initiale, aussi la fonction de bibliotheque C transmet le nom sans la barre oblique initiale (par exemple, name+1) a l'appel systeme.' STANDARDS POSIX.1-2008. HISTORIQUE POSIX.1-2001. BOGUES Avant Linux 2.6.14, l'<< umask >> du processus n'est pas applique aux permissions specifiees par mode. VOIR AUSSI mq_close(3), mq_getattr(3), mq_notify(3), mq_receive(3), mq_send(3), mq_unlink(3), mq_overview(7) TRADUCTION La traduction francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 mq_open(3)