Projet_SETI_RISC-V/riscv-gnu-toolchain/gcc/libphobos/libdruntime/core/sys/posix/mqueue.d
2023-03-06 14:48:14 +01:00

222 lines
6.8 KiB
D

/**
* D header file for Posix Message Queues
*
* Defines external functions required to manage Posix Message Queues
*
* mq_open(3) open a message queue
* mq_close(3) close a message queue
* mq_unlink(3) remove a message queue
* mq_send(3) send a message
* mq_receive(3) receive a message
* mq_timedsend(3) send a message with a timeout (linux specific)
* mq_timedreceive(3) receive a message with a timeout (linux specific)
* mq_getattr(3) get message queue attributes
* mq_setattr(3) set message queue attributes
* mq_notify(3) register asynchronous notify
*
* Copyright: Copyright (c) 2016 sociomantic labs. All rights reserved
* License: $(HTTP www.boost.org/LICENSE_1_0.txt, Boost License 1.0).
* Authors: Andreas Bok Andersen, Mathias Lang
* Standards: POSIX.1-2001.
* See_Also: $(HTTP pubs.opengroup.org/onlinepubs/9699919799/basedefs/mqueue.h.html, Standard)
* Source: $(DRUNTIMESRC core/sys/posix/mqueue.d)
*/
module core.sys.posix.mqueue;
import core.sys.posix.config;
import core.sys.posix.signal;
import core.sys.posix.time;
version (Posix):
version (CRuntime_Glibc):
extern (C):
@nogc nothrow:
@system:
/// Message queue descriptor.
alias int mqd_t;
/**
* Used in getting and setting the attributes of a message queue.
*/
struct mq_attr
{
/// Message queue flags.
c_long mq_flags;
/// Maximum number of messages.
c_long mq_maxmsg;
/// Maximum message size.
c_long mq_msgsize;
/// Number of messages currently queued.
c_long mq_curmsgs;
}
/**
* Establish connection between a process and a message queue `name`.
*
* Note:
* Linux prototypes are:
* mqd_t mq_open (const(char)* name, int oflag);
* mqd_t mq_open (const(char)* name, int oflag, mode_t mode, mq_attr* attr);
*
* Params:
* name = Name of the message queue to open.
* oflag = determines the type of access used.
* If `O_CREAT` is on `oflag`, the third argument is taken as a
* `mode_t`, the mode of the created message queue.
* If `O_CREAT` is on `oflag`, the fourth argument is taken as
* a pointer to a `mq_attr' (message queue attributes).
* If the fourth argument is `null`, default attributes are used.
* ... = varargs matching the function prototypes
*
* Returns:
* Message queue descriptor or (mqd_t) -1 on error.
*/
mqd_t mq_open(const(char)* name, int oflag, ...);
/**
* Closes the message queue descriptor mqdes.
*
* Params:
* mqdes = Message queue descriptor to close.
*
* Returns:
* On success mq_close() returns 0; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_close (mqd_t mqdes);
/**
* Query status and attributes of message queue `mqdes`.
*
* Params:
* mqdes = Message queue descriptor.
* mqstat = Buffer to fill with the message queue's attributes.
*
* Returns:
* On success mq_getattr() return 0; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_getattr (mqd_t mqdes, mq_attr* mqstat);
/*
* Set attributes associated with message queue `mqdes`
*
* Params:
* mqdes = Message queue descriptor.
* newstat = non-null pointer to fill with attributes for `mqdes`.
* oldstat = if not `null` it is filled with the old attributes.
*
* Returns:
* On success mq_setattr() return 0; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_setattr (mqd_t mqdes, const(mq_attr)* newstat, mq_attr* oldstat);
/**
* Remove the specified message queue `name`.
*
* Params:
* name = Name of the queue to remove.
*
* Returns:
* On success mq_unlink() returns 0; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_unlink (const(char)* name);
/**
* Register for notification when a message is available
*
* Params:
* mqdes = Message queue descriptor.
* notification = See `man 3 mq_notify` for details.
*
* Returns:
* On success mq_notify() returns 0; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_notify (mqd_t mqdes, const(sigevent)* notification);
/**
* Receive the oldest message with the highest priority the the message queue
*
* Params:
* mqdes = Message queue descriptor.
* msg_ptr = Buffer to write the message to
* msg_len = Size of the buffer provided as `msg_ptr`. Must be greater
* than the mq_msgsize attribute of the queue.
* msg_prio = If not `null`, set to the priority of this message.
*
* Returns:
* On success, mq_receive() returns the number of bytes in the received
* message; on error, -1 is returned, with errno set to indicate the error
*/
ssize_t mq_receive (mqd_t mqdes, char* msg_ptr, size_t msg_len, uint* msg_prio);
/**
* Receive the oldest message with the highest priority the the message queue,
* wait up to a certain timeout.
*
* Params:
* mqdes = Message queue descriptor.
* msg_ptr = Buffer to write the message to
* msg_len = Size of the buffer provided as `msg_ptr`. Must be greater
* than the mq_msgsize attribute of the queue.
* msg_prio = If not `null`, set to the priority of this message.
* abs_timeout = Specify a ceiling on the time to block if the queue is empty.
*
* Returns:
* On success, mq_receive() returns the number of bytes in the received
* message; on error, -1 is returned, with errno set to indicate the error
*/
ssize_t mq_timedreceive (mqd_t mqdes, char* msg_ptr, size_t msg_len,
uint* msg_prio, const(timespec)* abs_timeout);
/**
* Add a message to a message queue.
*
* Params:
* mqdes = Message queue descriptor.
* msg_ptr = Buffer to read the message from
* msg_len = Size of the message provided via `msg_ptr`. Must be lower
* or equal to the mq_msgsize attribute of the queue.
* msg_prio = Priority of this message.
*
* Returns:
* On success, mq_send() return zero; on error, -1 is returned, with errno
* set to indicate the error.
*/
int mq_send (mqd_t mqdes, const(char)* msg_ptr, size_t msg_len, uint msg_prio);
/**
* Add a message to a message queue, block up to a certain time if the queue
* is full.
*
* Params:
* mqdes = Message queue descriptor.
* msg_ptr = Buffer to read the message from
* msg_len = Size of the message provided via `msg_ptr`. Must be lower
* or equal to the mq_msgsize attribute of the queue.
* msg_prio = Priority of this message.
* abs_timeout = Specify a ceiling on the time to block if the queue is empty.
*
* Returns:
* On success, mq_timedsend() return zero; on error, -1 is returned,
* with errno set to indicate the error.
*
*/
int mq_timedsend (mqd_t mqdes, const(char)* msg_ptr, size_t msg_len,
uint msg_prio, const(timespec)* abs_timeout);