-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathmsg-receive.xml
236 lines (230 loc) · 9.08 KB
/
msg-receive.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: f7e33278a909d7f7bf491f77cb10c93581091736 Maintainer: takagi Status: ready -->
<!-- Credits: mumumu -->
<refentry xml:id="function.msg-receive" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>msg_receive</refname>
<refpurpose>メッセージキューからメッセージを受信する</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>msg_receive</methodname>
<methodparam><type>SysvMessageQueue</type><parameter>queue</parameter></methodparam>
<methodparam><type>int</type><parameter>desired_message_type</parameter></methodparam>
<methodparam><type>int</type><parameter role="reference">received_message_type</parameter></methodparam>
<methodparam><type>int</type><parameter>max_message_size</parameter></methodparam>
<methodparam><type>mixed</type><parameter role="reference">message</parameter></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>unserialize</parameter><initializer>&true;</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>flags</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter role="reference">error_code</parameter><initializer>&null;</initializer></methodparam>
</methodsynopsis>
<para>
<function>msg_receive</function> は、指定した <parameter>queue</parameter>
から指定した <parameter>desired_message_type</parameter>
の最初のメッセージを受信します。
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>queue</parameter></term>
<listitem>
<para>
メッセージキュー
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>desired_message_type</parameter></term>
<listitem>
<para>
<parameter>desired_message_type</parameter> が 0 の場合、
キューの先頭にあるメッセージが返されます。<parameter>desiredmsgtype</parameter>
が 0 より大きな値の場合、その型のメッセージのうち一番最初にあるものが返されます。
<parameter>desired_message_type</parameter> が 0 より小さな値の場合、
<parameter>desired_message_type</parameter>
の絶対値と同じかそれより小さい型のメッセージのうち一番最初にあるものが返されます。
条件を満たすメッセージがない場合は、
条件を満たすメッセージがキューに投入されるまで待ち続けます。
パラメータ <parameter>flags</parameter>
に <constant>MSG_IPC_NOWAIT</constant> を指定することで、
ブロックモードではなくすることが可能です。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>received_message_type</parameter></term>
<listitem>
<para>
受信したメッセージの型がこのパラメータに保存されます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>max_message_size</parameter></term>
<listitem>
<para>
読み込むメッセージの最大サイズは <parameter>mmax_message_size</parameter>
で指定します。もしキューにあるメッセージのサイズがこれより大きい場合、
(以下で説明する <parameter>flags</parameter> が設定されていない限り)
この関数は失敗します。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>message</parameter></term>
<listitem>
<para>
エラーが発生しなければ、
受信したメッセージは <parameter>message</parameter> に保存されます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>unserialize</parameter></term>
<listitem>
<para>
このパラメータが &true; に設定されている場合、
メッセージはセッションモジュールと同様の方法でシリアライズされているものとみなされます。
メッセージは元の状態に復元されたうえでスクリプトに返されます。
これにより、配列やオブジェクト構造体のような複雑な形式のデータを他の
PHP スクリプトから簡単に受信することが可能となります。
また、もし WDDX シリアライザを使用しているなら、あらゆる WDDX
互換のソースからデータを受け取ることが可能となります。
</para>
<para>
<parameter>unserialize</parameter> が &false; の場合、
メッセージはバイナリセーフな文字列として返されます。
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>flags</parameter></term>
<listitem>
<para>
オプションの <parameter>flags</parameter> により、低レベルの
msgrcv システムコールにフラグを渡すことが可能です。デフォルト値は 0
ですが、以下の値のうちのいくつかを(値を足すかあるいは論理和ととることで)
指定することが可能です。
<table>
<title>msg_receive のフラグの値</title>
<tgroup cols="2">
<tbody>
<row>
<entry><constant>MSG_IPC_NOWAIT</constant></entry>
<entry>
<parameter>desired_message_type</parameter> を満たすメッセージが存在しない場合に、
待ち続けずにすぐに結果を返します。
関数は失敗し、<constant>MSG_ENOMSG</constant>
に対応する整数値を返します。
</entry>
</row>
<row>
<entry><constant>MSG_EXCEPT</constant></entry>
<entry>
このフラグを正の <parameter>desired_message_type</parameter>
と組み合わせて使用すると、この関数は
<parameter>desired_message_type</parameter> 以外の型をもつ
最初のメッセージを受信するようになります。
</entry>
</row>
<row>
<entry><constant>MSG_NOERROR</constant></entry>
<entry>
このフラグを設定しておくと、メッセージが
<parameter>max_message_size</parameter> より大きい場合に
そのメッセージを <parameter>max_message_size</parameter> までに切り詰め、
エラーを返しません。
</entry>
</row>
</tbody>
</tgroup>
</table>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>error_code</parameter></term>
<listitem>
<para>
エラーが発生した場合は、オプションの <parameter>error_code</parameter>
にシステムの errno 値が設定されます。
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
<para>
処理が正常に完了すると、メッセージキューデータ構造体は以下のように更新されます。
<literal>msg_lrpid</literal> には呼び出し元のプロセス ID が
設定され、<parameter>msg_qnum</parameter> が 1 減少し、
<literal>msg_rtime</literal> が現在の時刻に設定されます。
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.0.0</entry>
<entry>
引数 <parameter>queue</parameter> は、
<classname>SysvMessageQueue</classname> のインスタンスを期待するようになりました。
これより前のバージョンでは、リソースが期待されていました。
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>msg_remove_queue</function></member>
<member><function>msg_send</function></member>
<member><function>msg_stat_queue</function></member>
<member><function>msg_set_queue</function></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->