Your receive is not likely to work. You're not putting the message into a buffer that "char *msg" points to, your putting it into the bytes (probably 4) that make up the "char *msg" variable itself along with randomly overwriting your stack, because sizeof( msg ) is probably 4, but you're telling the mq_receive() call that the address you're passing points to 16 bytes.
Hello,
My question is related to "pipcs -qa" command under HP-UX 11i PA-RISC 64 bits.
We have a little C program that creates posix ipc message queues using the mq_open() system function.
The program fail with 'No space left on device' error when we create big queues. What is the system... (6 Replies)
Hi all,
Please tell me how to change POSIX message queue maximum size? "ulimit" is not a solution because it controls shell resources. But i need to control queue size before login in and starting the shell. It is needed to limit queue size for applications started before login in.
Sorry for my... (7 Replies)
Hii can anyone pls tell how to limit the max no of message in a posix message queue. I have made changes in proc/sys/fs/mqueue/msg_max
But still whenever i try to read the value of max. message in the queue using attr.mq_curmsgs (where struct mq_attr attr) its giving the default value as 10.... (0 Replies)
Hi
I have a log file which contain XML message. I want to extract the value between the tag : <businessEventId>13201330</businessEventId> i.e., 13201330.
I tried the following commands but as the message is very long, unable to do it. Attached is the log file. Please provide inputs.
--... (3 Replies)
in a single main() function,so need signal handling. Use Posix Message Queue IPC mechanism , can ignore the priority and other linked list message,to implement the scenario:
client:Knock Knock
server:who's there
client: Eric
Server:Eric,Welcome.
client:exit
all process terminated
... (1 Reply)
Hi,
I wanted to know whether the POSIX message queues are statically allocated memory by the kernel based on the parameters specified in the open or as and when we send messages, memory are allocated?
Does the kernel reserve the specified memory for the message queue irrespective of whether... (1 Reply)
hello, I try to test the POSIX mq_open function on book unp like below:
#include "unpipc.h"
# include <mqueue.h>
int main(int argc, char **argv)
{
int c, flags;
mqd_t mqd;
flags = O_RDWR | O_CREAT;
while ((c = getopt(argc, argv, "e")) != -1) {
... (3 Replies)
I have a ksh script (script1) that calls another ksh script (script2). If script2.ksh hangs or takes too long to execute I want script1.ksh to kill the call to script2.ksh and instead just display "Script2 can't run right now". Could someone help me with coding this? (1 Reply)
Discussion started by: mrskittles99
1 Replies
LEARN ABOUT LINUX
mq_timedreceive
MQ_RECEIVE(3) Linux Programmer's Manual MQ_RECEIVE(3)NAME
mq_receive, mq_timedreceive - receive a message from a message queue
SYNOPSIS
#include <mqueue.h>
ssize_t mq_receive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned *msg_prio);
#include <time.h>
#include <mqueue.h>
ssize_t mq_timedreceive(mqd_t mqdes, char *msg_ptr,
size_t msg_len, unsigned *msg_prio,
const struct timespec *abs_timeout);
Link with -lrt.
Feature Test Macro Requirements for glibc (see feature_test_macros(7)):
mq_timedreceive():
_XOPEN_SOURCE >= 600 || _POSIX_C_SOURCE >= 200112L
DESCRIPTION
mq_receive() removes the oldest message with the highest priority from the message queue referred to by the descriptor mqdes, and places it
in the buffer pointed to by msg_ptr. The msg_len argument specifies the size of the buffer pointed to by msg_ptr; this must be greater
than the mq_msgsize attribute of the queue (see mq_getattr(3)). If prio is not NULL, then the buffer to which it points is used to return
the priority associated with the received message.
If the queue is empty, then, by default, mq_receive() blocks until a message becomes available, or the call is interrupted by a signal han-
dler. If the O_NONBLOCK flag is enabled for the message queue description, then the call instead fails immediately with the error EAGAIN.
mq_timedreceive() behaves just like mq_receive(), except that if the queue is empty and the O_NONBLOCK flag is not enabled for the message
queue description, then abs_timeout points to a structure which specifies a ceiling on the time for which the call will block. This ceil-
ing is an absolute timeout in seconds and nanoseconds since the Epoch, 1970-01-01 00:00:00 +0000 (UTC), and it is specified in the follow-
ing structure:
struct timespec {
time_t tv_sec; /* seconds */
long tv_nsec; /* nanoseconds */
};
If no message is available, and the timeout has already expired by the time of the call, mq_timedreceive() returns immediately.
RETURN VALUE
On success, mq_receive() and mq_timedreceive() return the number of bytes in the received message; on error, -1 is returned, with errno set
to indicate the error.
ERRORS
EAGAIN The queue was empty, and the O_NONBLOCK flag was set for the message queue description referred to by mqdes.
EBADF The descriptor specified in mqdes was invalid.
EINTR The call was interrupted by a signal handler; see signal(7).
EINVAL The call would have blocked, and abs_timeout was invalid, either because tv_sec was less than zero, or because tv_nsec was less than
zero or greater than 1000 million.
EMSGSIZE
msg_len was less than the mq_msgsize attribute of the message queue.
ETIMEDOUT
The call timed out before a message could be transferred.
CONFORMING TO
POSIX.1-2001.
NOTES
On Linux, mq_timedreceive() is a system call, and mq_receive() is a library function layered on top of that system call.
SEE ALSO mq_close(3), mq_getattr(3), mq_notify(3), mq_open(3), mq_send(3), mq_unlink(3), feature_test_macros(7), mq_overview(7), time(7)COLOPHON
This page is part of release 3.27 of the Linux man-pages project. A description of the project, and information about reporting bugs, can
be found at http://www.kernel.org/doc/man-pages/.
Linux 2010-09-20 MQ_RECEIVE(3)