X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=release%2Fman3%2Fmq_notify.3;h=91c998408c2d7d4d9df274fad09532814476c33d;hb=385329a00e7910812cffee7720cbd7ae0321afc5;hp=b1e78a556e29c4dae8350ad724032c58bc669af9;hpb=ce024239a1d8e74a7a44f7c24cee4375cb13b3ef;p=linuxjm%2FLDP_man-pages.git diff --git a/release/man3/mq_notify.3 b/release/man3/mq_notify.3 index b1e78a55..91c99840 100644 --- a/release/man3/mq_notify.3 +++ b/release/man3/mq_notify.3 @@ -1,8 +1,7 @@ -'\" t -.\" Hey Emacs! This file is -*- nroff -*- source. -.\" +.\" t .\" Copyright (C) 2006 Michael Kerrisk .\" +.\" %%%LICENSE_START(VERBATIM) .\" Permission is granted to make and distribute verbatim copies of this .\" manual provided the copyright notice and this permission notice are .\" preserved on all copies. @@ -22,174 +21,107 @@ .\" .\" Formatted or processed versions of this manual, if unaccompanied by .\" the source, must acknowledge the copyright and authors of this work. +.\" %%%LICENSE_END +.\" +.\"******************************************************************* +.\" +.\" This file was generated with po4a. Translate the source file. +.\" +.\"******************************************************************* .\" .\" Japanese Version Copyright (c) 2006 Akihiro MOTOKI all rights reserved. .\" Translated 2006-07-31, Akihiro MOTOKI .\" Updated 2010-04-18, Akihiro MOTOKI, LDP v3.24 .\" Updated 2010-10-27, Akihiro Motoki, LDP v3.29 .\" -.TH MQ_NOTIFY 3 2010-10-04 "Linux" "Linux Programmer's Manual" +.TH MQ_NOTIFY 3 2014\-04\-06 Linux "Linux Programmer's Manual" .SH 名前 mq_notify \- メッセージ到着時に通知を行うよう登録する .SH 書式 .nf -.B #include +\fB#include \fP .sp -.BI "int mq_notify(mqd_t " mqdes ", const struct sigevent *" notification ); +\fBint mq_notify(mqd_t \fP\fImqdes\fP\fB, const struct sigevent *\fP\fInotification\fP\fB);\fP .fi .sp \fI\-lrt\fP でリンクする。 .SH 説明 -.BR mq_notify () -を使うと、ディスクリプタ -.I mqdes -で参照される空のメッセージキューに新しくメッセージが到着した時に -非同期の通知 (notification) の配送が行われるように登録したり、 -その解除を行ったりできる。 - -.I sevp -引き数は -.I sigevent -構造体へのポインタである。 -この構造体の定義と一般的な詳細については -.BR sigevent (7) +\fBmq_notify\fP() を使うと、ディスクリプタ \fImqdes\fP で参照される空のメッセージキューに新しくメッセージが到着した時に +非同期の通知 (notification) の配送が行われるように登録したり、 その解除を行ったりできる。 + +\fIsevp\fP 引き数は \fIsigevent\fP 構造体へのポインタである。 この構造体の定義と一般的な詳細については \fBsigevent\fP(7) を参照。 .PP -.I sevp -が NULL でないポインタであれば、 -.BR mq_notify () -はメッセージ通知を受け取るように呼び出し元のプロセスを登録する。 -.I sevp -が指す -.I sigevent -構造体の -.I sigev_notify -フィールドは、どのような通知を行うのかを指定する。 +\fIsevp\fP が NULL でないポインタであれば、 \fBmq_notify\fP() はメッセージ通知を受け取るように呼び出し元のプロセスを登録する。 +\fIsevp\fP が指す \fIsigevent\fP 構造体の \fIsigev_notify\fP フィールドは、どのような通知を行うのかを指定する。 このフィールドは以下の値のいずれかを持つ。 -.TP -.B SIGEV_NONE -「空の (null)」の通知: 呼び出し元のプロセスを通知の宛先として登録するが、 -実際にはメッセージが到着した時に通知は送られない。 +.TP +\fBSIGEV_NONE\fP .\" When is SIGEV_NONE useful? -.TP -.B SIGEV_SIGNAL -.I sigev_signo -で指定されたシグナルを送って、プロセスに通知する。 -一般的な詳細については -.BR sigevent (7) -を参照。 -.I siginfo_t -構造体の -.I si_code -フィールドには -.B SI_MESGQ -が設定される。 +「空の (null)」の通知: 呼び出し元のプロセスを通知の宛先として登録するが、 実際にはメッセージが到着した時に通知は送られない。 +.TP +\fBSIGEV_SIGNAL\fP .\" I don't know of other implementations that set .\" si_pid and si_uid -- MTK -さらに、 -.I si_pid -にはメッセージを送信したプロセスの PID が、 -.I si_uid -には送信プロセスの実ユーザ ID が設定される。 -.TP -.B SIGEV_THREAD -メッセージの配送時には、 -.I sigev_notify_function -があたかも新しいスレッドの開始関数であるかのように起動される。 -詳細は -.BR sigevent (7) -を参照。 +\fIsigev_signo\fP で指定されたシグナルを送って、プロセスに通知する。 一般的な詳細については \fBsigevent\fP(7) を参照。 +\fIsiginfo_t\fP 構造体の \fIsi_code\fP フィールドには \fBSI_MESGQ\fP が設定される。 さらに、 \fIsi_pid\fP +にはメッセージを送信したプロセスの PID が、 \fIsi_uid\fP には送信プロセスの実ユーザ ID が設定される。 +.TP +\fBSIGEV_THREAD\fP +メッセージの配送時には、 \fIsigev_notify_function\fP があたかも新しいスレッドの開始関数であるかのように起動される。 詳細は +\fBsigevent\fP(7) を参照。 .PP -一つのメッセージキューから通知を受信するように登録できるプロセスは -一つだけである。 - -.I sevp -が NULL で、かつ呼び出し元のプロセスがこのメッセージキューからの -通知を受信するに現在登録している場合、登録を削除する。 -これ以降、別のプロセスがこのメッセージキューから通知を受信するように -登録できるようになる。 - -メッセージ通知は、それまで空のキューに新しいメッセージが到着した -場合にのみ行われる。 -.BR mq_notify () -が呼び出された時にそのキューが空でない場合、 -そのキューが空になり、その後新しいメッセージが到着した時に -初めて通知が行われることになる。 - -別のプロセスやスレッドが -.BR mq_receive (3) -を使って、空のキューからメッセージの読み出しを待っている場合、 -メッセージ通知の登録は全て無視される。 -メッセージは -.BR mq_receive (3) -を呼び出しているプロセスやスレッドに配送され、 +一つのメッセージキューから通知を受信するように登録できるプロセスは 一つだけである。 + +\fIsevp\fP が NULL で、かつ呼び出し元のプロセスがこのメッセージキューからの 通知を受信するに現在登録している場合、登録を削除する。 +これ以降、別のプロセスがこのメッセージキューから通知を受信するように 登録できるようになる。 + +メッセージ通知は、それまで空のキューに新しいメッセージが到着した 場合にのみ行われる。 \fBmq_notify\fP() +が呼び出された時にそのキューが空でない場合、 そのキューが空になり、その後新しいメッセージが到着した時に 初めて通知が行われることになる。 + +別のプロセスやスレッドが \fBmq_receive\fP(3) を使って、空のキューからメッセージの読み出しを待っている場合、 +メッセージ通知の登録は全て無視される。 メッセージは \fBmq_receive\fP(3) を呼び出しているプロセスやスレッドに配送され、 メッセージ通知の登録は効力を持ったままとなる。 -通知は一度だけ行われる。通知が送られた後は、通知要求の登録は削除され、 -別のプロセスがメッセージ通知を受信するように登録できるようになる。 -通知を受けたプロセスが次の通知も受信したい場合は、 -.BR mq_notify () -を使ってその後の通知も受けるように要求することができる。 -.BR mq_notify () -を再度呼び出すのは、読み出していないメッセージを全部読み出して -キューが空になる前にすべきである -(キューからのメッセージ読み出しをキューが空になった時に -停止 (block) せずに行うには、キューを非停止モード (non-blocking mode) -に設定しておくとよい)。 +通知は一度だけ行われる。通知が送られた後は、通知要求の登録は削除され、 別のプロセスがメッセージ通知を受信するように登録できるようになる。 +通知を受けたプロセスが次の通知も受信したい場合は、 \fBmq_notify\fP() を使ってその後の通知も受けるように要求することができる。 +\fBmq_notify\fP() を再度呼び出すのは、読み出していないメッセージを全部読み出して キューが空になる前にすべきである +(キューからのメッセージ読み出しをキューが空になった時に 停止 (block) せずに行うには、キューを非停止モード (non\-blocking +mode) に設定しておくとよい)。 .SH 返り値 -成功すると、 -.BR mq_notify () -は 0 を返す。エラーの場合、\-1 を返し、 -.I errno -をエラーを示す値に設定する。 +成功すると、 \fBmq_notify\fP() は 0 を返す。エラーの場合、\-1 を返し、 \fIerrno\fP をエラーを示す値に設定する。 .SH エラー -.TP -.B EBADF -.I mqdes -に指定されたディスクリプタが不正である。 -.TP -.B EBUSY -別のプロセスがすでに -このメッセージキューに対する通知を受信するように登録している。 -.TP -.B EINVAL -.I sevp\->sigev_notify -が許可された値のいずれでもない。もしくは -.I sevp\->sigev_notify -が -.B SIGEV_SIGNAL -だが -.I sevp\->sigev_signo -が有効なシグナル番号ではない。 -.TP -.B ENOMEM -必要なメモリがなかった。 +.TP +\fBEBADF\fP +\fImqdes\fP に指定されたディスクリプタが不正である。 +.TP +\fBEBUSY\fP +別のプロセスがすでに このメッセージキューに対する通知を受信するように登録している。 +.TP +\fBEINVAL\fP +\fIsevp\->sigev_notify\fP が許可された値のいずれでもない。もしくは \fIsevp\->sigev_notify\fP が +\fBSIGEV_SIGNAL\fP だが \fIsevp\->sigev_signo\fP が有効なシグナル番号ではない。 +.TP +\fBENOMEM\fP +十分なメモリがない。 .PP -POSIX.1-2008 では、 -.I sevp -が NULL で、呼び出し元のプロセスがキュー -.I mqdes -に関する通知を受信するように登録されていない場合、エラー -.B EINVAL -を生成するような実装を行っても「よい」ことになっている。 -.\" Linux の実装では EINVAL は生成されない +.\" Linux does not do this +POSIX.1\-2008 では、 \fIsevp\fP が NULL で、呼び出し元のプロセスがキュー \fImqdes\fP +に関する通知を受信するように登録されていない場合、エラー \fBEINVAL\fP を生成するような実装を行っても「よい」ことになっている。 .SH 準拠 -POSIX.1-2001. +POSIX.1\-2001. .SH 例 -以下のプログラムは、 -コマンドライン引き数で指定された名前のメッセージキューへの -通知要求を登録し、通知はスレッドの作成によって行われる。 -そのスレッドは、そのキューからメッセージを一つ読み出してから、 -プロセスを終了する関数を実行する。 +以下のプログラムは、 コマンドライン引き数で指定された名前のメッセージキューへの 通知要求を登録し、通知はスレッドの作成によって行われる。 +そのスレッドは、そのキューからメッセージを一つ読み出してから、 プロセスを終了する関数を実行する。 +.SS プログラムのソース .nf - #include #include #include #include #include -#define handle_error(msg) \\ +#define handle_error(msg) \e do { perror(msg); exit(EXIT_FAILURE); } while (0) static void /* スレッド開始関数 */ @@ -213,7 +145,7 @@ tfunc(union sigval sv) if (nr == \-1) handle_error("mq_receive"); - printf("Read %ld bytes from MQ\\n", (long) nr); + printf("Read %zd bytes from MQ\en", nr); free(buf); exit(EXIT_SUCCESS); /* プロセスを終了する */ } @@ -225,8 +157,8 @@ main(int argc, char *argv[]) struct sigevent sev; if (argc != 2) { - fprintf(stderr, "Usage: %s \\n", argv[0]); - exit(EXIT_FAILURE); + fprintf(stderr, "Usage: %s \en", argv[0]); + exit(EXIT_FAILURE); } mqdes = mq_open(argv[1], O_RDONLY); @@ -244,11 +176,9 @@ main(int argc, char *argv[]) } .fi .SH 関連項目 -.BR mq_close (3), -.BR mq_getattr (3), -.BR mq_open (3), -.BR mq_receive (3), -.BR mq_send (3), -.BR mq_unlink (3), -.BR mq_overview (7), -.BR sigevent (7) +\fBmq_close\fP(3), \fBmq_getattr\fP(3), \fBmq_open\fP(3), \fBmq_receive\fP(3), +\fBmq_send\fP(3), \fBmq_unlink\fP(3), \fBmq_overview\fP(7), \fBsigevent\fP(7) +.SH この文書について +この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.68 の一部 +である。プロジェクトの説明とバグ報告に関する情報は +http://www.kernel.org/doc/man\-pages/ に書かれている。