.\" to EXAMPLE text.
.\" 2008-10-10, mtk: add description of pipe2()
.\"
-.\" Japanese Version Copyright (c) 1997 SUTO, Mitsuaki
-.\" all rights reserved.
-.\" Translated Thu Jun 26 21:09:51 JST 1997
-.\" by SUTO, Mitsuaki <suto@av.crl.sony.co.jp>
-.\" Updated & Modified Thu Feb 10 00:47:11 JST 2005
-.\" by Yuichi SATO <ysato444@yahoo.co.jp>
-.\" Updated & Modified Sat Dec 17 08:10:16 JST 2005 by Yuichi SATO
-.\" Updated 2008-02-10, Akihiro MOTOKI <amotoki@dd.iij4u.or.jp>, LDP v2.77
-.\" Updated 2008-11-09, Akihiro MOTOKI, LDP v3.13
+.\"*******************************************************************
.\"
-.TH PIPE 2 2009-09-15 "Linux" "Linux Programmer's Manual"
-.SH ̾Á°
-pipe, pipe2 \- ¥Ñ¥¤¥×¤òÀ¸À®¤¹¤ë
-.SH ½ñ¼°
+.\" This file was generated with po4a. Translate the source file.
+.\"
+.\"*******************************************************************
+.TH PIPE 2 2012\-02\-14 Linux "Linux Programmer's Manual"
+.SH 名前
+pipe, pipe2 \- パイプを生成する
+.SH 書式
.nf
-.B #include <unistd.h>
+\fB#include <unistd.h>\fP
.sp
-.BI "int pipe(int " pipefd "[2]);"
+\fBint pipe(int \fP\fIpipefd\fP\fB[2]);\fP
.sp
-.B #define _GNU_SOURCE
-.B #include <unistd.h>
+\fB#define _GNU_SOURCE\fP /* feature_test_macros(7) 参照 */
+\fB#include <fcntl.h>\fP /* O_* 定数の定義の取得 */
+\fB#include <unistd.h>\fP
.sp
-.BI "int pipe2(int " pipefd "[2], int " flags );
+\fBint pipe2(int \fP\fIpipefd\fP\fB[2], int \fP\fIflags\fP\fB);\fP
.fi
-.SH ÀâÌÀ
-.BR pipe (2)
-¤Ï¥Ñ¥¤¥×¤òÀ¸À®¤¹¤ë¡£
-¥Ñ¥¤¥×¤Ï¡¢¥×¥í¥»¥¹´ÖÄÌ¿®¤Ë»ÈÍѤǤ¤ëñÊý¸þ¤Î¥Ç¡¼¥¿¥Á¥ã¥Í¥ë¤Ç¤¢¤ë¡£
-ÇÛÎó
-.I pipefd
-¤Ï¡¢¥Ñ¥¤¥×¤Îξü¤ò»²¾È¤¹¤ëÆó¤Ä¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
-ÊÖ¤¹¤Î¤Ë»ÈÍѤµ¤ì¤ë¡£
-.I pipefd[0]
-¤¬¥Ñ¥¤¥×¤ÎÆɤ߽Ф·Â¦¡¢
-.I pipefd[1]
-¤¬¥Ñ¥¤¥×¤Î½ñ¤¹þ¤ß¦¤Ç¤¢¤ë¡£
-¥Ñ¥¤¥×¤Î½ñ¤¹þ¤ß¦¤Ë½ñ¤¹þ¤Þ¤ì¤¿¥Ç¡¼¥¿¤Ï¡¢
-¥Ñ¥¤¥×¤ÎÆɤ߽Ф·Â¦¤«¤éÆɤ߽Фµ¤ì¤ë¤Þ¤Ç¥«¡¼¥Í¥ë¤Ç¥Ð¥Ã¥Õ¥¡¥ê¥ó¥°¤µ¤ì¤ë¡£
-¤µ¤é¤Ê¤ë¾ÜºÙ¤Ï
-.BR pipe (7)
-¤ò»²¾È¤Î¤³¤È¡£
+.SH 説明
+\fBpipe\fP(2) はパイプを生成する。 パイプは、プロセス間通信に使用できる単方向のデータチャネルである。 配列 \fIpipefd\fP
+は、パイプの両端を参照する二つのファイルディスクリプタを 返すのに使用される。 \fIpipefd[0]\fP がパイプの読み出し側、
+\fIpipefd[1]\fP がパイプの書き込み側である。 パイプの書き込み側に書き込まれたデータは、
+パイプの読み出し側から読み出されるまでカーネルでバッファリングされる。 さらなる詳細は \fBpipe\fP(7) を参照のこと。
-.BR pipe2 ()
-¤Ï
-.I flags
-¤¬ 0 ¤Î¾ì¹ç¤Ë¤Ï
-.BR pipe ()
-¤ÈƱ¤¸¤Ç¤¢¤ë¡£
-.I flags
-¤Ë°Ê²¼¤ÎÃͤò¥Ó¥Ã¥ÈËè¤ÎÏÀÍýÏ (OR) ¤Ç»ØÄꤹ¤ë¤³¤È¤Ç¡¢
-°Û¤Ê¤ëÆ°ºî¤ò¤µ¤»¤ë¤³¤È¤¬¤Ç¤¤ë¡£
-.TP 12
-.B O_NONBLOCK
-¿·¤·¤¯À¸À®¤µ¤ì¤ëÆó¤Ä¤Î¥ª¡¼¥×¥ó¥Õ¥¡¥¤¥ëµ½Ò (open file description) ¤Î
-.B O_NONBLOCK
-¥Õ¥¡¥¤¥ë¥¹¥Æ¡¼¥¿¥¹¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
-¤³¤Î¥Õ¥é¥°¤ò»È¤¦¤³¤È¤Ç¡¢
-.B O_NONBLOCK
-¤ò¥»¥Ã¥È¤¹¤ë¤¿¤á¤Ë
-.BR fcntl (2)
-¤òÄɲäǸƤӽФ¹É¬Íפ¬¤Ê¤¯¤Ê¤ë¡£
-.TP
-.B O_CLOEXEC
-¿·¤·¤¯À¸À®¤µ¤ì¤ëÆó¤Ä¤Î¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤Î
-close-on-exec
-.RB ( FD_CLOEXEC )
-¥Õ¥é¥°¤ò¥»¥Ã¥È¤¹¤ë¡£
-¤³¤Î¥Õ¥é¥°¤¬Ìò¤ËΩ¤ÄÍýͳ¤Ë¤Ä¤¤¤Æ¤Ï¡¢
-.BR open (2)
-¤Î
-.B O_CLOEXEC
-¥Õ¥é¥°¤ÎÀâÌÀ¤ò»²¾È¤Î¤³¤È¡£
-.SH ÊÖ¤êÃÍ
-À®¸ù¤·¤¿¾ì¹ç 0 ¤¬Ê֤롣¼ºÇÔ¤·¤¿¾ì¹ç \-1 ¤¬Ê֤ꡢ
-.I errno
-¤¬¥¨¥é¡¼¤ÎÆâÍƤ˽¾¤Ã¤ÆÀßÄꤵ¤ì¤ë¡£
-.SH ¥¨¥é¡¼
-.TP
-.B EFAULT
-.I pipefd
-¤¬Ìµ¸ú¤ÊÃͤǤ¢¤ë¡£
-.TP
-.B EINVAL
-.RB ( pipe2 ())
-.I flags
-¤Ë̵¸ú¤ÊÃͤ¬Æþ¤Ã¤Æ¤¤¤ë¡£
-.TP
-.B EMFILE
-¤³¤Î¥×¥í¥»¥¹¤Ç»È¤ï¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤¬Â¿¤¹¤®¤ë¡£
-.TP
-.B ENFILE
-¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ÎÁí¿ô¤¬¥·¥¹¥Æ¥à¤ÎÀ©¸Â¤Ë㤷¤¿¡£
-.SH ¥Ð¡¼¥¸¥ç¥ó
-.BR pipe2 ()
-¤Ï¥Ð¡¼¥¸¥ç¥ó 2.6.27 ¤Ç Linux ¤ËÄɲ䵤줿¡£
-glibc ¤Ë¤è¤ë¥µ¥Ý¡¼¥È¤Ï¥Ð¡¼¥¸¥ç¥ó 2.9 °Ê¹ß¤ÇÍøÍѤǤ¤ë¡£
-.SH ½àµò
-.BR pipe ():
-POSIX.1-2001.
+\fBpipe2\fP() は \fIflags\fP が 0 の場合には \fBpipe\fP() と同じである。 \fIflags\fP に以下の値をビット毎の論理和
+(OR) で指定することで、 異なる動作をさせることができる。
+.TP 12
+\fBO_NONBLOCK\fP
+新しく生成される二つのオープンファイル記述 (open file description) の \fBO_NONBLOCK\fP
+ファイルステータスフラグをセットする。 このフラグを使うことで、 \fBO_NONBLOCK\fP をセットするために \fBfcntl\fP(2)
+を追加で呼び出す必要がなくなる。
+.TP
+\fBO_CLOEXEC\fP
+新しく生成される二つのファイルディスクリプタの close\-on\-exec (\fBFD_CLOEXEC\fP) フラグをセットする。
+このフラグが役に立つ理由については、 \fBopen\fP(2) の \fBO_CLOEXEC\fP フラグの説明を参照のこと。
+.SH 返り値
+成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
+.SH エラー
+.TP
+\fBEFAULT\fP
+\fIpipefd\fP が無効な値である。
+.TP
+\fBEINVAL\fP
+(\fBpipe2\fP()) \fIflags\fP に無効な値が入っている。
+.TP
+\fBEMFILE\fP
+このプロセスで使われているファイルディスクリプタが多すぎる。
+.TP
+\fBENFILE\fP
+オープンされているファイルの総数がシステムの制限に達している。
+.SH バージョン
+\fBpipe2\fP() はバージョン 2.6.27 で Linux に追加された。 glibc によるサポートはバージョン 2.9 以降で利用できる。
+.SH 準拠
+\fBpipe\fP(): POSIX.1\-2001.
-.BR pipe2 ()
-¤Ï Linux ¸ÇͤǤ¢¤ë¡£
-.SH Îã
-.\" fork.2 ¤Ï¤³¤ÎÎã¤Î¥×¥í¥°¥é¥à¤ò»²¾È¤·¤Æ¤¤¤ë¡£
-°Ê²¼¤Î¥×¥í¥°¥é¥à¤Ç¤Ï¥Ñ¥¤¥×¤òÀ¸À®¤·¡¢¤½¤Î¸å
-.BR fork (2)
-¤Ç»Ò¥×¥í¥»¥¹¤òÀ¸À®¤¹¤ë¡£
-»Ò¥×¥í¥»¥¹¤ÏƱ¤¸¥Ñ¥¤¥×¤ò»²¾È¤¹¤ë¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿½¸¹ç¤Î¥³¥Ô¡¼¤ò
-·Ñ¾µ¤¹¤ë¡£
-.BR fork (2)
-¤Î¸å¡¢³Æ¥×¥í¥»¥¹¤Ï¥Ñ¥¤¥×
-.RB ( pipe (7)
-¤ò»²¾È) ¤ËɬÍפ¬¤Ê¤¯¤Ê¤Ã¤¿¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò¥¯¥í¡¼¥º¤¹¤ë¡£
-¿Æ¥×¥í¥»¥¹¤Ï¥×¥í¥°¥é¥à¤Î¥³¥Þ¥ó¥É¥é¥¤¥ó°ú¤¿ô¤Ë´Þ¤Þ¤ì¤ë
-ʸ»úÎó¤ò¥Ñ¥¤¥×¤Ø½ñ¤¹þ¤ß¡¢
-»Ò¥×¥í¥»¥¹¤Ï¤³¤Îʸ»úÎó¤ò¥Ñ¥¤¥×¤«¤é 1 ¥Ð¥¤¥È¤º¤ÄÆɤ߹þ¤ó¤Çɸ½à½ÐÎϤ˥¨¥³¡¼¤¹¤ë¡£
+\fBpipe2\fP() は Linux 固有である。
+.SH 例
+.\" fork.2 refers to this example program.
+以下のプログラムではパイプを生成し、その後 \fBfork\fP(2) で子プロセスを生成する。
+子プロセスは同じパイプを参照するファイルディスクリプタ集合のコピーを 継承する。 \fBfork\fP(2) の後、各プロセスはパイプ
+(\fBpipe\fP(7) を参照) に必要がなくなったディスクリプタをクローズする。 親プロセスはプログラムのコマンドライン引き数に含まれる
+文字列をパイプへ書き込み、 子プロセスはこの文字列をパイプから 1 バイトずつ読み込んで標準出力にエコーする。
.nf
#include <sys/wait.h>
char buf;
if (argc != 2) {
- fprintf(stderr, "Usage: %s <string>\\n", argv[0]);
+ fprintf(stderr, "Usage: %s <string>\en", argv[0]);
exit(EXIT_FAILURE);
}
exit(EXIT_FAILURE);
}
- if (cpid == 0) { /* »Ò¥×¥í¥»¥¹¤¬¥Ñ¥¤¥×¤«¤éÆɤ߹þ¤à */
- close(pipefd[1]); /* »ÈÍѤ·¤Ê¤¤ write ¦¤Ï¥¯¥í¡¼¥º¤¹¤ë */
+ if (cpid == 0) { /* 子プロセスがパイプから読み込む */
+ close(pipefd[1]); /* 使用しない write 側はクローズする */
while (read(pipefd[0], &buf, 1) > 0)
write(STDOUT_FILENO, &buf, 1);
- write(STDOUT_FILENO, "\\n", 1);
+ write(STDOUT_FILENO, "\en", 1);
close(pipefd[0]);
_exit(EXIT_SUCCESS);
- } else { /* ¿Æ¥×¥í¥»¥¹¤Ï argv[1] ¤ò¥Ñ¥¤¥×¤Ø½ñ¤¹þ¤à */
- close(pipefd[0]); /* »ÈÍѤ·¤Ê¤¤ read ¦¤Ï¥¯¥í¡¼¥º¤¹¤ë */
+ } else { /* 親プロセスは argv[1] をパイプへ書き込む */
+ close(pipefd[0]); /* 使用しない read 側はクローズする */
write(pipefd[1], argv[1], strlen(argv[1]));
- close(pipefd[1]); /* Æɤ߹þ¤ß¦¤¬ EOF ¤Ë½Ð²ñ¤¦ */
- wait(NULL); /* »Ò¥×¥í¥»¥¹¤òÂÔ¤Ä */
+ close(pipefd[1]); /* 読み込み側が EOF に出会う */
+ wait(NULL); /* 子プロセスを待つ */
exit(EXIT_SUCCESS);
}
}
.fi
-.SH ´ØÏ¢¹àÌÜ
-.BR fork (2),
-.BR read (2),
-.BR socketpair (2),
-.BR write (2),
-.BR popen (3),
-.BR pipe (7)
+.SH 関連項目
+\fBfork\fP(2), \fBread\fP(2), \fBsocketpair\fP(2), \fBwrite\fP(2), \fBpopen\fP(3),
+\fBpipe\fP(7)