.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH PIPE 2 2012\-02\-14 Linux "Linux Programmer's Manual"
+.\"
+.\" 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
+.\" Updated 2012-04-30, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH PIPE 2 2014\-02\-11 Linux "Linux Programmer's Manual"
.SH 名前
pipe, pipe2 \- パイプを生成する
.SH 書式
\fBint pipe2(int \fP\fIpipefd\fP\fB[2], int \fP\fIflags\fP\fB);\fP
.fi
.SH 説明
-\fBpipe\fP(2) はパイプを生成する。 パイプは、プロセス間通信に使用できる単方向のデータチャネルである。 配列 \fIpipefd\fP
+\fBpipe\fP() はパイプを生成する。 パイプは、プロセス間通信に使用できる単方向のデータチャネルである。 配列 \fIpipefd\fP
は、パイプの両端を参照する二つのファイルディスクリプタを 返すのに使用される。 \fIpipefd[0]\fP がパイプの読み出し側、
\fIpipefd[1]\fP がパイプの書き込み側である。 パイプの書き込み側に書き込まれたデータは、
パイプの読み出し側から読み出されるまでカーネルでバッファリングされる。 さらなる詳細は \fBpipe\fP(7) を参照のこと。
\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 フラグの説明を参照のこと。
+.TP
+\fBO_DIRECT\fP (Linux 3.4 以降)
+.\" commit 9883035ae7edef3ec62ad215611cb8e17d6a1a5d
+「パケット」モードで入出力を行うパイプを作成する。 このパイプへの \fBwrite\fP(2) それぞれが別のパケットとして扱われ、 このパイプからの
+\fBread\fP(2) では一度に一つパケットが読み出される。 以下の点に注意すること。
+.RS
+.IP * 3
+\fBPIPE_BUF\fP バイト (\fBpipe\fP(7) 参照) より大きいデータを書き込んだ場合、複数のパケットに分割される。
+.IP *
+\fBread\fP(2)
+で次のパケットよりも小さなバッファサイズを指定した場合、要求されたバイト数のデータが読み出され、そのパケットの超過分のバイトは破棄される。
+可能性のある最大サイズのパケットを読み出すには、\fBPIPE_BUF\fP のバッファサイズを指定すれば十分である (上の項目を参照)。
+.IP *
+長さ 0 のパケットはサポートされていない。 (バッファサイズ 0 を指定した \fBread\fP(2) は何も行わず 0 を返す)。
+.RE
+.IP
+このフラグをサポートしていない古いカーネルでは、エラー \fBEINVAL\fP が返る。これによりカーネルがサポートしていないことが分かる。
+.TP
+\fBO_NONBLOCK\fP
+新しく生成される二つのオープンファイル記述 (open file description) の \fBO_NONBLOCK\fP
+ファイルステータスフラグをセットする。 このフラグを使うことで、 \fBO_NONBLOCK\fP をセットするために \fBfcntl\fP(2)
+を追加で呼び出す必要がなくなる。
.SH 返り値
成功した場合は 0 が返される。エラーの場合は \-1 が返され、 \fIerrno\fP が適切に設定される。
.SH エラー
子プロセスは同じパイプを参照するファイルディスクリプタ集合のコピーを 継承する。 \fBfork\fP(2) の後、各プロセスはパイプ
(\fBpipe\fP(7) を参照) に必要がなくなったディスクリプタをクローズする。 親プロセスはプログラムのコマンドライン引き数に含まれる
文字列をパイプへ書き込み、 子プロセスはこの文字列をパイプから 1 バイトずつ読み込んで標準出力にエコーする。
+.SS プログラムのソース
.nf
-
+#include <sys/types.h>
#include <sys/wait.h>
#include <stdio.h>
#include <stdlib.h>
char buf;
if (argc != 2) {
- fprintf(stderr, "Usage: %s <string>\en", argv[0]);
- exit(EXIT_FAILURE);
+ fprintf(stderr, "Usage: %s <string>\en", argv[0]);
+ exit(EXIT_FAILURE);
}
if (pipe(pipefd) == \-1) {
\fBfork\fP(2), \fBread\fP(2), \fBsocketpair\fP(2), \fBwrite\fP(2), \fBpopen\fP(3),
\fBpipe\fP(7)
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.50 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.67 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。