OSDN Git Service

(split) Convert release and draft pages to UTF-8.
[linuxjm/LDP_man-pages.git] / release / man3 / sem_wait.3
index f8339af..c3d785b 100644 (file)
@@ -27,9 +27,9 @@
 .\" Translated 2006-04-18, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>
 .\"
 .TH SEM_WAIT 3 2010-02-25 "Linux" "Linux Programmer's Manual"
-.SH Ì¾Á°
-sem_wait, sem_timedwait, sem_trywait \- ¥»¥Þ¥Õ¥©¤ò¥í¥Ã¥¯¤¹¤ë
-.SH ½ñ¼°
+.SH 名前
+sem_wait, sem_timedwait, sem_trywait \- セマフォをロックする
+.SH 書式
 .nf
 .B #include <semaphore.h>
 .sp
@@ -41,49 +41,49 @@ sem_wait, sem_timedwait, sem_trywait \- 
 .fi
 .sp
 .sp
-\fI\-lrt\fP ¤Þ¤¿¤Ï \fI\-pthread\fP ¤Ç¥ê¥ó¥¯¤¹¤ë¡£
+\fI\-lrt\fP または \fI\-pthread\fP でリンクする。
 .in -4n
-glibc ¸þ¤±¤Îµ¡Ç½¸¡ºº¥Þ¥¯¥í¤ÎÍ×·ï
+glibc 向けの機能検査マクロの要件
 .RB ( feature_test_macros (7)
-»²¾È):
+参照):
 .in
 .sp
 .BR sem_timedwait ():
 _POSIX_C_SOURCE\ >=\ 200112L || _XOPEN_SOURCE\ >=\ 600
-.SH ÀâÌÀ
+.SH 説明
 .BR sem_wait ()
-¤Ï
+は
 .I sem
-¤¬»Ø¤¹¥»¥Þ¥Õ¥©¤ÎÃͤò 1 ¸º¤é¤¹ (¥í¥Ã¥¯¤¹¤ë)¡£
-¥»¥Þ¥Õ¥©¤ÎÃͤ¬ 0 ¤è¤êÂ礭¤¤¾ì¹ç¡¢¸º»»¤¬¼Â¹Ô¤µ¤ì¡¢´Ø¿ô¤Ïľ¤Á¤ËÉüµ¢¤¹¤ë¡£
-¥»¥Þ¥Õ¥©¤Î¸½ºßÃͤ¬ 0 ¤Î¾ì¹ç¤Ë¤Ï¡¢¸º»»¤ò¼Â¹Ô¤Ç¤­¤ë¤è¤¦¤Ë¤Ê¤ë
-(¤Ä¤Þ¤ê¡¢¥»¥Þ¥Õ¥©¤ÎÃͤ¬ 0 ¤è¤êÂ礭¤ÊÃͤˤʤë) ¤Þ¤Ç¡¢¤â¤·¤¯¤Ï
-¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ë¤è¤Ã¤Æ¸Æ¤Ó½Ð¤·¤¬ÃæÃǤµ¤ì¤ë¤Þ¤Ç¡¢
-´Ø¿ô¸Æ¤Ó½Ð¤·¤ÏÄä»ß (block) ¤¹¤ë¡£
+が指すセマフォの値を 1 減らす (ロックする)。
+セマフォの値が 0 より大きい場合、減算が実行され、関数は直ちに復帰する。
+セマフォの現在値が 0 の場合には、減算を実行できるようになる
+(つまり、セマフォの値が 0 より大きな値になる) まで、もしくは
+シグナルハンドラによって呼び出しが中断されるまで、
+関数呼び出しは停止 (block) する。
 
 .BR sem_trywait ()
-¤Ï
+は
 .BR sem_wait ()
-¤ÈƱ¤¸¤À¤¬¡¢¥»¥Þ¥Õ¥©Ãͤθº»»¤ò¤¹¤°¤Ë¼Â¹Ô¤Ç¤­¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë¡¢
-Ää»ß (block) ¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¥¨¥é¡¼¤ÇÉüµ¢¤¹¤ë
+と同じだが、セマフォ値の減算をすぐに実行できなかった場合に、
+停止 (block) するのではなくエラーで復帰する
 .RI ( errno
-¤Ë
+に
 .B EAGAIN
-¤¬¥»¥Ã¥È¤µ¤ì¤ë) ÅÀ¤¬°Û¤Ê¤ë¡£
+がセットされる) 点が異なる。
 
 .BR sem_timedwait ()
-¤Ï
+は
 .BR sem_wait ()
-¤ÈƱ¤¸¤À¤¬¡¢¥»¥Þ¥Õ¥©Ãͤθº»»¤ò¤¹¤°¤Ë¼Â¹Ô¤Ç¤­¤Ê¤«¤Ã¤¿¾ì¹ç¤Ë
-´Ø¿ô¸Æ¤Ó½Ð¤·¤¬Ää»ß¤¹¤ë»þ´Ö¤Î¾å¸Â¤ò
+と同じだが、セマフォ値の減算をすぐに実行できなかった場合に
+関数呼び出しが停止する時間の上限を
 .I abs_timeout
-¤Ç»ØÄꤹ¤ëÅÀ¤¬°Û¤Ê¤ë¡£
+で指定する点が異なる。
 .I abs_timeout
-°ú¤­¿ô¤Ï¡¢¥¿¥¤¥à¥¢¥¦¥È»þ¹ï¤ò»ØÄꤹ¤ë¹½Â¤ÂΤؤΥݥ¤¥ó¥¿¤Ç¤¢¤ë¡£
-¤³¤Î¹½Â¤ÂΤˤϡ¢¥¿¥¤¥à¥¢¥¦¥È»þ¹ï¤ò»þ¹ïµª¸µ (Epoch;
-1970-01-01 00:00:00 +0000 (UTC)) ¤«¤é¤Î
-·Ð²á»þ´Ö (ÉáܥʥÎÉÃ) ¤Ç»ØÄꤹ¤ë¡£
-¹½Â¤ÂΤϰʲ¼¤Î¤è¤¦¤ËÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
+引き数は、タイムアウト時刻を指定する構造体へのポインタである。
+この構造体には、タイムアウト時刻を時刻紀元 (Epoch;
+1970-01-01 00:00:00 +0000 (UTC)) からの
+経過時間 (秒+ナノ秒) で指定する。
+構造体は以下のように定義されている:
 
 .nf
 .in +4n
@@ -94,84 +94,84 @@ struct timespec {
 .in
 .fi
 .PP
-´Ø¿ô¸Æ¤Ó½Ð¤·»þÅÀ¤Ç¤¹¤Ç¤Ë¥¿¥¤¥à¥¢¥¦¥È¤Ë»ØÄꤷ¤¿»þ¹ï¤¬²á¤®¤Æ¤ª¤ê¡¢
-¤«¤Ä¥»¥Þ¥Õ¥©¤ò¤¹¤°¤Ë¥í¥Ã¥¯¤Ç¤­¤Ê¤«¤Ã¤¿¾ì¹ç¤Ï¡¢
+関数呼び出し時点ですでにタイムアウトに指定した時刻が過ぎており、
+かつセマフォをすぐにロックできなかった場合は、
 .BR sem_timedwait ()
-¤Ï¥¿¥¤¥à¥¢¥¦¥È¥¨¥é¡¼
+ã\81¯ã\82¿ã\82¤ã\83 ã\82¢ã\82¦ã\83\88ã\82¨ã\83©ã\83¼
 .RI ( errno
-¤Ë
+に
 .B ETIMEDOUT
-¤¬¥»¥Ã¥È¤µ¤ì¤ë) ¤Ç¼ºÇÔ¤¹¤ë¡£
+がセットされる) で失敗する。
 
-¥»¥Þ¥Õ¥©Áàºî¤¬¤¹¤°¤Ë¼Â¹Ô¤Ç¤­¤ë¤È¤­¤Ï¡¢
+セマフォ操作がすぐに実行できるときは、
 .I abs_timeout
-¤¬¤É¤ó¤ÊÃͤǤ¢¤Ã¤Æ¤â
+がどんな値であっても
 .BR sem_timedwait ()
-¤¬¼ºÇÔ¤¹¤ë¤³¤È¤Ï·è¤·¤Æ¤Ê¤¤¡£¤µ¤é¤Ë¤¤¤¦¤È¡¢¤³¤Î¾ì¹ç¤Ë¤Ï
+が失敗することは決してない。さらにいうと、この場合には
 .I abs_timeout
-¤ÎÀµÅöÀ­¤Î¸¡ºº¤Ï¹Ô¤ï¤ì¤Ê¤¤¡£
-.SH ÊÖ¤êÃÍ
-À®¸ù¤¹¤ë¤È¡¢¤³¤ì¤é¤Î´Ø¿ô¤Ï 0 ¤òÊÖ¤¹¡£
-¥¨¥é¡¼¤Î¾ì¹ç¡¢¥»¥Þ¥Õ¥©¤ÎÃͤòÊѹ¹¤»¤º¤Ë¡¢\-1 ¤òÊÖ¤·¡¢
+の正当性の検査は行われない。
+.SH 返り値
+成功すると、これらの関数は 0 を返す。
+エラーの場合、セマフォの値を変更せずに、\-1 を返し、
 .I errno
-¤Ë¥¨¥é¡¼¤ò¼¨¤¹Ãͤò¥»¥Ã¥È¤¹¤ë¡£
-.SH ¥¨¥é¡¼
+にエラーを示す値をセットする。
+.SH ã\82¨ã\83©ã\83¼
 .TP
 .B EINTR
-¸Æ¤Ó½Ð¤·¤Ï¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ë¤è¤êÃæÃǤµ¤ì¤¿¡£
+呼び出しはシグナルハンドラにより中断された。
 .BR signal (7)
-»²¾È¡£
+参照。
 .TP
 .B EINVAL
 .I sem
-¤ÏÍ­¸ú¤Ê¥»¥Þ¥Õ¥©¤Ç¤Ê¤¤¡£
+は有効なセマフォでない。
 .PP
 .BR sem_trywait ()
-¤Î¾ì¹ç¤Ë¤Ï¡¢¾åµ­¤Ë²Ã¤¨¤Æ°Ê²¼¤Î¥¨¥é¡¼¤âµ¯¤³¤ë¡£
+の場合には、上記に加えて以下のエラーも起こる。
 .TP
 .B EAGAIN
-Ää»ß (block) ¤»¤º¤Ë¥í¥Ã¥¯Áàºî¤ò´°Î»¤Ç¤­¤Ê¤«¤Ã¤¿ (¤Ä¤Þ¤ê¡¢
-¥»¥Þ¥Õ¥©¤Î¸½ºß¤ÎÃͤ¬ 0 ¤Ç¤¢¤Ã¤¿)¡£
+停止 (block) せずにロック操作を完了できなかった (つまり、
+セマフォの現在の値が 0 であった)。
 .PP
 .BR sem_timedwait ()
-¤Î¾ì¹ç¡¢°Ê²¼¤Î¥¨¥é¡¼¤âµ¯¤³¤ë¡£
+の場合、以下のエラーも起こる。
 .TP
 .B EINVAL
 .I abs_timeout.tv_nsecs
-¤ÎÃͤ¬ 0 Ì¤Ëþ¡¢¤â¤·¤¯¤Ï 1,000,000,000 °Ê¾å¤Ç¤¢¤ë¡£
+の値が 0 未満、もしくは 1,000,000,000 以上である。
 .TP
 .B ETIMEDOUT
-¥»¥Þ¥Õ¥©¤Î¥í¥Ã¥¯¤ËÀ®¸ù¤¹¤ëÁ°¤Ë»þ´ÖÀÚ¤ì¤È¤Ê¤Ã¤¿¡£
-.\" POSIX.1-2001 ¤Ç¤Ï¥¨¥é¡¼¤È¤·¤Æ EDEADLK ¤âÍÑ°Õ¤·¤Æ¤¤¤ë¡£
-.\" ¤³¤ì¤Ï¥Ç¥Ã¥É¥í¥Ã¥¯¾ò·ï¤ò¸¡½Ð¤·¤¿¤³¤È¤ò¼¨¤¹¤â¤Î¤À¤¬¡¢
-.\" Linux ¤ÇȯÀ¸¤¹¤ë¤³¤È¤Ï¤Ê¤¤(?)
+セマフォのロックに成功する前に時間切れとなった。
+.\" POSIX.1-2001 ではエラーとして EDEADLK も用意している。
+.\" これはデッドロック条件を検出したことを示すものだが、
+.\" Linux で発生することはない(?)
 POSIX.1-2001.
-.SH Ãí°Õ
-¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ï¡¢
+.SH 注意
+シグナルハンドラは、
 .BR sigaction (2)
-¤Î
+の
 .B SA_RESTART
-¥Õ¥é¥°¤ò»ÈÍѤ·¤Æ¤¤¤ë¤«¤É¤¦¤«¤Ë´Ø¤ï¤é¤º¡¢¤³¤ì¤é¤Î´Ø¿ô¤Î¸Æ¤Ó½Ð¤·¤¬
-Ää»ß¤·¤Æ¤¤¤ë¾ì¹ç¡¢¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ë¤è¤ê¾ï¤ËÃæÃǤµ¤ì¤ë¡£
-.\" sem_wait() ¤Ï¾¤Î¤Û¤È¤ó¤É¤Î¼ÂÁõ¤Ç¤Ï¾ï¤ËÃæÃǤµ¤ì¤ë¤¬¡¢
-.\" FreeBSD 5.4 ¤Ç¤Ï SA_RESTART ¤ò»ØÄꤷ¤Æ¤ª¤¯¤È¼Â¹Ô¤¬ºÆ³«¤µ¤ì¤ë¡£
-.SH Îã
+フラグを使用しているかどうかに関わらず、これらの関数の呼び出しが
+停止している場合、シグナルハンドラにより常に中断される。
+.\" sem_wait() は他のほとんどの実装では常に中断されるが、
+.\" FreeBSD 5.4 では SA_RESTART を指定しておくと実行が再開される。
+.SH 
 .PP
-°Ê²¼¤Ë¼¨¤¹ (¤Á¤ç¤Ã¤È¤·¤¿) ¥×¥í¥°¥é¥à¤Ï̾Á°¤Ê¤·¥»¥Þ¥Õ¥©¤ÎÁàºî¤ò¹Ô¤¦¡£
-¥×¥í¥°¥é¥à¤Ï¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤­¿ô¤ò 2 ¤Ä¼è¤ë¡£
-ºÇ½é¤Î°ú¤­¿ô¤Ë¤Ï¡¢
+以下に示す (ちょっとした) プログラムは名前なしセマフォの操作を行う。
+プログラムはコマンドライン引き数を 2 つ取る。
+最初の引き数には、
 .B SIGALRM
-¥·¥°¥Ê¥ë¤òÀ¸À®¤¹¤ë¤¿¤á¤Î¥¢¥é¡¼¥à¥¿¥¤¥Þ¡¼¤ÎÀßÄê¤Ë»È¤ï¤ì¤ëÃͤò
-ÉÃñ°Ì¤Ç»ØÄꤹ¤ë¡£¤³¤Î¥·¥°¥Ê¥ë¥Ï¥ó¥É¥é¤Ï¡¢
+シグナルを生成するためのアラームタイマーの設定に使われる値を
+秒単位で指定する。このシグナルハンドラは、
 .I main()
-Æâ¤Ç
+内で
 .BR sem_timedwait ()
-¤ò»È¤Ã¤ÆÂԤäƤ¤¤ë¥»¥Þ¥Õ¥©¤ò¡¢
+を使って待っているセマフォを、
 .BR sem_post (3)
-¤ò»È¤Ã¤Æ²Ã»»¤¹¤ë¡£
-2ÈÖÌܤΰú¤­¿ô¤Ë¤Ï¡¢
+を使って加算する。
+2番目の引き数には、
 .BR sem_timedwait ()
-¤ËÅϤ¹¥¿¥¤¥à¥¢¥¦¥È¤Þ¤Ç¤Î»þ´Ö¤òÉÃñ°Ì¤Ç»ØÄꤹ¤ë¡£
+に渡すタイムアウトまでの時間を秒単位で指定する。
 
 .in +4n
 .nf
@@ -185,7 +185,7 @@ About to call sem_timedwait()
 sem_timedwait() timed out
 .fi
 .in
-.SS ¥×¥í¥°¥é¥à¤Î¥½¡¼¥¹
+.SS ã\83\97ã\83­ã\82°ã\83©ã\83 ã\81®ã\82½ã\83¼ã\82¹
 \&
 .nf
 #include <unistd.h>
@@ -263,7 +263,7 @@ main(int argc, char *argv[])
     exit((s == 0) ? EXIT_SUCCESS : EXIT_FAILURE);
 }
 .fi
-.SH ´ØÏ¢¹àÌÜ
+.SH 関連項目
 .BR clock_gettime (2),
 .BR sem_getvalue (3),
 .BR sem_post (3),