NOM
mq_open - Ouvrir une file de messages
SYNOPSIS
#include
<fcntl.h> /* Pour les constantes O_* */
#include <sys/stat.h> /* Pour les constantes des
modes */
#include <mqueue.h>
mqd_t
mq_open(const char *name, int
oflag);
mqd_t mq_open(const char *name, int
oflag, mode_t mode,
struct mq_attr *attr);
Éditer les liens avec -lrt.
DESCRIPTION
La fonction mq_open() crée une nouvelle file de messages POSIX, ou ouvre une file de messages existante. La file est identifiée par name. Pour plus de détails sur la construction de name, consultez mq_overview(7).
L’argument
oflag spécifie les drapeaux qui
contrôlent l’opération d’appel (les
définitions des valeurs des attributs peuvent
être obtenues en incluant <fcntl.h>). Un
unique drapeau parmi les suivants doit être
spécifié 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 ou soit recevoir des messages. |
Zéro ou
plusieurs des drapeaux suivants peuvent être
ajoutés avec un ou binaire dans
oflag :
O_CLOEXEC (since Linux 2.6.26)
Set the close-on-exec flag for the message queue descriptor. See open(2) for a discussion of why this flag is useful.
O_CREAT
Créer la file de messages si elle n’existe pas. Le propriétaire de la file de messages est défini à l’UID du processus appelant, il en est de même pour le GID.
O_EXCL |
Si O_CREAT est spécifié dans oflag, et si une file de nom name existe déjà, alors elle échouera et renverra le code d’erreur EEXIST. |
O_NONBLOCK
Ouvrir une file en mode non bloquant. Dans de telles circonstances où mq_receive(3) et mq_send(3) devraient être normalement bloquantes, ces fonctions échoueront avec le code d’erreur EAGAIN.
If O_CREAT is specified in oflag, then two additional arguments must be supplied. The mode argument specifies the permissions to be placed on the new queue, as for open(2). (Symbolic definitions for the permissions bits can be obtained by including <sys/stat.h>.) The permissions settings are masked against the process umask.
The fields of the struct mq_attr pointed to attr specify the maximum number of messages and the maximum size of messages that the queue will allow. This structure is defined as follows:
struct mq_attr { long mq_flags; /* Flags (ignored for mq_open()) */ long mq_maxmsg; /* Max. # of messages on queue */ long mq_msgsize; /* Max. message size (bytes) */ long mq_curmsgs; /* # of messages currently in queue (ignored for mq_open()) */ };
Only the mq_maxmsg and mq_msgsize fields are employed when calling mq_open(); the values in the remaining fields are ignored.
If attr is NULL, then the queue is created with implementation-defined default attributes. Since Linux 3.5, two /proc files can be used to control these defaults; see mq_overview(7) for details.
VALEUR RENVOYÉE
En cas de succès, mq_open() renvoie un descripteur de file de messages à utiliser avec les autres fonctions des files de messages. En cas d’erreur, mq_open() renvoie (mqd_t) -1, avec errno définie.
ERREURS
EACCES |
La file existe mais l’appelant n’a pas les permissions pour l’ouvrir dans le mode spécifié. | ||
EACCES |
name contient plus d’un caratère « / ». | ||
EEXIST |
O_CREAT et O_EXCL sont spécifiés dans oflag, mais une file avec le même nom existe déjà. | ||
EINVAL |
name doesn’t follow the format in mq_overview(7). | ||
EINVAL |
O_CREAT était spécifié dans oflag, et attr était non NULL, mais attr->mq_maxmsg ou attr->mq_msqsize n’était pas valable. Ces deux champs doivent être supérieurs à zéro. Avec un processus non privilégié (qui n’a pas la capacité CAP_SYS_RESOURCE), attr->mq_maxmsg doit être inférieur ou égal à la limite msg_max, et attr->mq_msgsize doit être inférieur ou égal à la limite msgsize_max. En plus, même avec un processus privilégié, attr->mq_maxmsg ne peut pas être plus grand que la limite HARD_MAX. Consultez mq_overview(7) pour les détails sur ces limites. | ||
EMFILE |
The per-process limit on the number of open file and message queue descriptors has been reached (see the description of RLIMIT_NOFILE in getrlimit(2)). |
ENAMETOOLONG
nom est trop long.
ENFILE |
The system-wide limit on the total number of open files and message queues has been reached. | ||
ENOENT |
Le drapeau O_CREAT n’a pas été spécifié dans oflag, et aucune file avec le nom name n’existe. | ||
ENOENT |
name est juste « / » suivi d’aucun autre caractère. | ||
ENOMEM |
Mémoire insuffisante. | ||
ENOSPC |
Pas assez d’espace pour la création de la nouvelle file de messages. Ceci s’est probablement produit car la limite queues_max a été atteinte ; consultez mq_overview(7). |
ATTRIBUTS
Pour une explication des termes utilisés dans cette section, consulter attributes(7).
CONFORMITÉ
POSIX.1-2001, POSIX.1-2008.
NOTES
différences
entre bibliothèque C et noyau
The mq_open() library function is implemented on top
of a system call of the same name. The library function
performs the check that the name starts with a slash
(/), giving the EINVAL error if it does not. The
kernel system call expects name to contain no
preceding slash, so the C library function passes
name without the preceding slash (i.e.,
name+1) to the system call.
BOGUES
Avec les noyaux antérieurs à la version 2.6.14, l’« umask » du processus n’est pas appliqué aux permissions spécifiées 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)
COLOPHON
Cette page fait partie de la publication 5.07 du projet man-pages Linux. Une description du projet et des instructions pour signaler des anomalies et la dernière version de cette page, peuvent être trouvées à l’adresse https://www.kernel.org/doc/man-pages/.
TRADUCTION
La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin [AT] laposte.net>, Thierry Vignaud <tvignaud [AT] mandriva.com>, François Micaux, Alain Portal <aportal [AT] univ-montp2.fr>, Jean-Philippe Guérard <fevrier [AT] tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon [AT] wanadoo.fr>, Julien Cristau <jcristau [AT] debian.org>, Thomas Huriaux <thomas.huriaux [AT] gmail.com>, Nicolas François <nicolas.francois [AT] centraliens.net>, Florentin Duneau <fduneau [AT] gmail.com>, Simon Paillard <simon.paillard [AT] resel.fr>, Denis Barbier <barbier [AT] debian.org> et David Prévot <david [AT] tilapin.org>
Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.
Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à <debian-l10n-french [AT] lists.org>.