Linux では、パイプもファイルの一種ですが、パイプ関数を使用してパイプを作成でき、そのプロトタイプは次のように宣言されます:
#inlcude
int Pipe(int field[2] );
実際には通信バッファに相当し、fields[0]は読み取りに使用され、fields[1]は書き込みに使用されます。次の例では、パイプが通信バッファとして作成され、子プロセスはパイプのフィールド[1]記述子を介してパイプに文字列を書き込みます。親プロセスはフィールド[を使用します。 1] パイプから次の文字列を読み取って表示します:
#include
#include
#include
#include < ;string.h> ;
#include
#include
#include
#define BUF_SIZ 255 // メッセージバッファサイズ
int main(int argc , char **argv)
{
charbuffer[BUF_SIZ + 1];
int fd[2];
// パラメータとして文字列を受け取ります
if (argc != 2)
{
fprintf ( stderr, "Usage : %s stringna", argv[0]);
exit(1);
}
// 通信用のパイプを作成します
if (pipe(fd) != 0)
{
fprintf(stderr, "パイプエラーの作成: %sna", strerror(errno));
exit(1);
}
if (fork() == 0) // 子プロセスでパイプにメッセージを書き込みます
{
close(fd [0]);
printf("子 %ld write to Pipena", getpid())
snprintf(buffer, BUF_SIZ, "%s", argv[1]);
write(fd[1], バッファ, strlen(buffer)) ; T Printf ("Child%ld quit.na", getpid ());
}
else // 親プロセスで、Pipe から MSG を読み取ります
{
Close (fd [1]); Pipena", getpid());
memset(buffer, '