OSDN Git Service

35b594d30588a0dbbc54186e3718e5f92c456aec
[linuxjm/LDP_man-pages.git] / original / man3 / mq_receive.3
1 '\" t
2 .\" Copyright (C) 2006 Michael Kerrisk <mtk.manpages@gmail.com>
3 .\"
4 .\" %%%LICENSE_START(VERBATIM)
5 .\" Permission is granted to make and distribute verbatim copies of this
6 .\" manual provided the copyright notice and this permission notice are
7 .\" preserved on all copies.
8 .\"
9 .\" Permission is granted to copy and distribute modified versions of this
10 .\" manual under the conditions for verbatim copying, provided that the
11 .\" entire resulting derived work is distributed under the terms of a
12 .\" permission notice identical to this one.
13 .\"
14 .\" Since the Linux kernel and libraries are constantly changing, this
15 .\" manual page may be incorrect or out-of-date.  The author(s) assume no
16 .\" responsibility for errors or omissions, or for damages resulting from
17 .\" the use of the information contained herein.  The author(s) may not
18 .\" have taken the same level of care in the production of this manual,
19 .\" which is licensed free of charge, as they might when working
20 .\" professionally.
21 .\"
22 .\" Formatted or processed versions of this manual, if unaccompanied by
23 .\" the source, must acknowledge the copyright and authors of this work.
24 .\" %%%LICENSE_END
25 .\"
26 .TH MQ_RECEIVE 3 2014-01-18 "Linux" "Linux Programmer's Manual"
27 .SH NAME
28 mq_receive, mq_timedreceive \- receive a message from a message queue
29 .SH SYNOPSIS
30 .nf
31 .B #include <mqueue.h>
32 .sp
33 .BI "ssize_t mq_receive(mqd_t " mqdes ", char *" msg_ptr ,
34 .BI "                   size_t " msg_len ", unsigned int *" msg_prio );
35 .sp
36 .B #include <time.h>
37 .B #include <mqueue.h>
38 .sp
39 .BI "ssize_t mq_timedreceive(mqd_t " mqdes ", char *" msg_ptr ,
40 .BI "                   size_t " msg_len ", unsigned int *" msg_prio ,
41 .BI "                   const struct timespec *" abs_timeout );
42 .fi
43 .sp
44 Link with \fI\-lrt\fP.
45 .sp
46 .ad l
47 .in -4n
48 Feature Test Macro Requirements for glibc (see
49 .BR feature_test_macros (7)):
50 .in
51 .sp
52 .BR mq_timedreceive ():
53 .RS 4
54 _XOPEN_SOURCE\ >=\ 600 || _POSIX_C_SOURCE\ >=\ 200112L
55 .RE
56 .ad
57 .SH DESCRIPTION
58 .BR mq_receive ()
59 removes the oldest message with the highest priority from
60 the message queue referred to by the descriptor
61 .IR mqdes ,
62 and places it in the buffer pointed to by
63 .IR msg_ptr .
64 The
65 .I msg_len
66 argument specifies the size of the buffer pointed to by
67 .IR msg_ptr ;
68 this must be greater than or equal to the
69 .I mq_msgsize
70 attribute of the queue (see
71 .BR mq_getattr (3)).
72 If
73 .I msg_prio
74 is not NULL, then the buffer to which it points is used
75 to return the priority associated with the received message.
76
77 If the queue is empty, then, by default,
78 .BR mq_receive ()
79 blocks until a message becomes available,
80 or the call is interrupted by a signal handler.
81 If the
82 .B O_NONBLOCK
83 flag is enabled for the message queue description,
84 then the call instead fails immediately with the error
85 .BR EAGAIN .
86
87 .BR mq_timedreceive ()
88 behaves just like
89 .BR mq_receive (),
90 except that if the queue is empty and the
91 .B O_NONBLOCK
92 flag is not enabled for the message queue description, then
93 .I abs_timeout
94 points to a structure which specifies a ceiling on the time for which
95 the call will block.
96 This ceiling is an absolute timeout in seconds and nanoseconds
97 since the Epoch, 1970-01-01 00:00:00 +0000 (UTC), and it is
98 specified in the following structure:
99 .sp
100 .in +4n
101 .nf
102 struct timespec {
103     time_t tv_sec;        /* seconds */
104     long   tv_nsec;       /* nanoseconds */
105 };
106
107 .fi
108 .in
109 If no message is available,
110 and the timeout has already expired by the time of the call,
111 .BR mq_timedreceive ()
112 returns immediately.
113 .SH RETURN VALUE
114 On success,
115 .BR mq_receive ()
116 and
117 .BR mq_timedreceive ()
118 return the number of bytes in the received message;
119 on error, \-1 is returned, with
120 .I errno
121 set to indicate the error.
122 .SH ERRORS
123 .TP
124 .B EAGAIN
125 The queue was empty, and the
126 .B O_NONBLOCK
127 flag was set for the message queue description referred to by
128 .IR mqdes .
129 .TP
130 .B EBADF
131 The descriptor specified in
132 .I mqdes
133 was invalid.
134 .TP
135 .B EINTR
136 The call was interrupted by a signal handler; see
137 .BR signal (7).
138 .TP
139 .B EINVAL
140 The call would have blocked, and
141 .I abs_timeout
142 was invalid, either because
143 .I tv_sec
144 was less than zero, or because
145 .I tv_nsec
146 was less than zero or greater than 1000 million.
147 .TP
148 .B EMSGSIZE
149 .I msg_len
150 was less than the
151 .I mq_msgsize
152 attribute of the message queue.
153 .TP
154 .B ETIMEDOUT
155 The call timed out before a message could be transferred.
156 .SH CONFORMING TO
157 POSIX.1-2001.
158 .SH NOTES
159 On Linux,
160 .BR mq_timedreceive ()
161 is a system call, and
162 .BR mq_receive ()
163 is a library function layered on top of that system call.
164 .SH SEE ALSO
165 .BR mq_close (3),
166 .BR mq_getattr (3),
167 .BR mq_notify (3),
168 .BR mq_open (3),
169 .BR mq_send (3),
170 .BR mq_unlink (3),
171 .BR mq_overview (7),
172 .BR time (7)
173 .SH COLOPHON
174 This page is part of release 3.67 of the Linux
175 .I man-pages
176 project.
177 A description of the project,
178 information about reporting bugs,
179 and the latest version of this page,
180 can be found at
181 \%http://www.kernel.org/doc/man\-pages/.