From owner-FreeBSD-users-jp@jp.freebsd.org  Mon Apr 24 22:47:07 2000
Received: (from daemon@localhost)
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) id WAA98737;
	Mon, 24 Apr 2000 22:47:07 +0900 (JST)
	(envelope-from owner-FreeBSD-users-jp@jp.FreeBSD.org)
Received: from localhost (localhost [127.0.0.1])
	by castle.jp.freebsd.org (8.9.3+3.2W/8.7.3) with ESMTP id WAA98731
	for <FreeBSD-users-jp@jp.freebsd.org>; Mon, 24 Apr 2000 22:47:07 +0900 (JST)
	(envelope-from matsu@jp.freebsd.org)
To: FreeBSD-users-jp@jp.freebsd.org
From: Matsumura Naoki <matsu@kiryu.co.jp>
X-Mailer: Mew version 1.93 on Emacs 19.34 / Mule 2.3 (SUETSUMUHANA)
Mime-Version: 1.0
Content-Type: Text/Plain; charset=iso-2022-jp
Content-Transfer-Encoding: 7bit
Message-Id: <20000424224707Z.matsu@jp.freebsd.org>
Date: Mon, 24 Apr 2000 22:47:07 +0900
X-Dispatcher: imput version 980905(IM100)
Lines: 98
Reply-To: FreeBSD-users-jp@jp.freebsd.org
Precedence: list
X-Distribute: distribute version 2.1 (Alpha) patchlevel 24e+000315
X-Sequence: FreeBSD-users-jp 51357
Subject: [FreeBSD-users-jp 51357] pipe(2)
Errors-To: owner-FreeBSD-users-jp@jp.freebsd.org
Sender: owner-FreeBSD-users-jp@jp.freebsd.org
X-Originator: matsu@jp.freebsd.org

$B$^$D$`$i$G$9!#(B

$BK\Mh(B fj.unix $B$"$?$j$K=P$7$?$$$N$G$9$,!"(BNetNews $B$K(B
$B%"%/%;%9$G$-$J$$$N$G!"$9$$$^$;$s$,(B $B$3$A$i$G<ALd$5$;$F2<$5$$!#(B

$B;~4V$N$+$+$k=hM}$,(B10$B8D$"$k$H$7$^$9!#$=$l$>$l2?IC$G=hM}$,(B
$B=*$o$k$+$o$+$j$^$;$s!#(B1$BIC$G=*$o$k$b$N$b$"$l$P(B1$BJ,$+$+$k$b$N$b(B
$B$"$j$^$9!#(B

$B$=$3$G;R%W%m%;%9$K;~4V$N$+$+$k=hM}$r$5$;!"$=$N=hM}7k2L$r(B
$B?F%W%m%;%9$,<hF@$9$k$H$7$^$9!#(B

$B$G!"(Bpipe(2) $B$G%Q%$%W$r:n$j!"(B10$B2s(B fork $B$7$F;R%W%m%;%9$r:n$k$3$H$K(B
$B$7$^$7$?!#;R%W%m%;%9$O;~4V$N$+$+$k=hM}$r9T$C$?8e!"%Q%$%W7PM3$G(B
$B?F%W%m%;%9$K=hM}7k2L$rAw$j!"(Bexit $B$7$^$9!#(B

$B$?$@$70lEY$K(B10$B8D(B fork $B$7$?$iIi2Y$,$+$+$k$N$G!"0lEY$K(B3$B8D$7$+(B
$B;R%W%m%;%9$r:n@.$7$J$$$h$&$K$7$?$$$N$G$9!#(B

$B$H$$$&$o$1$G!"0J2<$N$h$&$J%W%m%0%i%`$r=q$-$^$7$?!#(B

------------------------------
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/uio.h>
#include <sys/wait.h>

FILE *pread;  /* pipe read */
int pipes[2];

/* pread (pipes[0]) $B$+$i(B1$B9TFI$_9~$`(B */

void read_buf(){
    char buf[256];

    fgets(buf,sizeof(buf),pread);
    printf("Parent: %s",buf);
}

main(){
    int loop = 10;  /* $B;E;v$N?t(B */
    int i;
    char buf[256];
    pid_t pid;
    int now_children = 0; /* $B8=:_$N;R%W%m%;%9$N?t(B */
    int max_proc = 3; /* $B0lEY$K(B fork $B$9$k;R%W%m%;%9?t$N>e8B(B */

    pipe(pipes); /* pipes[1] $B$K=q$-9~$`$s$@$b$N$,(B pipes[0] $B$+$iFI$a$k(B */

    pread = fdopen(pipes[0],"r"); /* $B%U%!%$%k%G%#%9%/%j%W%?$+$i(B FILE * $B$r@8@.(B */

    for ( i=0 ; i<loop ; i++ ){
        pid = fork();
        if ( pid == 0 ){   /* $B;R%W%m%;%9(B */
            close(pipes[0]);

            srand(i);
            sleep(rand()%10);  /* $B$3$3$G;~4V$N$+$+$k=hM}$r9T$&(B */

            sprintf(buf,"HELLO I'm %dth child.\n",i); /* $B?F%W%m%;%9$KJs9p(B */
            write(pipes[1],buf,strlen(buf));

            close(pipes[1]);
            exit(0); /* $B=*N;(B */
        }
        now_children++;

        if ( now_children == max_proc ){ /* $B;XDj$N?t$N;R%W%m%;%9$,<B9T$5$l$F$$$l$P(B */
            int len;
            wait(NULL); /* $B;R%W%m%;%9$N=*N;$rBT$D(B */
                        /* = $B;XDj$N?t0J>e$N;R%W%m%;%9$r0lEY$K5/F0$7$J$$$h$&$K$9$k(B */
            read_buf();
            now_children--;
        }
    }

    /* $B;D$C$?;R6!$rBT$D(B  */
    while (now_children){
        read_buf();
        now_children--;
    }
}
------------------------------

$B<ALd(B1. $B$3$l$r%3%^%s%I%i%$%s$+$i<B9T$9$k$H!"@5>o$KF0:n$7$F$$$k$h$&$K(B
       $B8+$($k$N$G$9$,!"(B% a.out > foo $B$J$I$H%j%@%$%l%/%H$9$k$H!"F1$89T$,(B
       $B2?EY$b=PNO$5$l$F$7$^$$$^$9!#$3$l$O$J$<$G$7$g$&$+!#$I$&$7$F(B
       $B%j%@%$%l%/%H$9$k$+$I$&$+$G5sF0$,0c$&$N$G$7$g$&$+!#(B

       $B$?$@$7!"(Bif ( now_children == max_proc ){ ... } $B$r:o=|$9$k$H(B
       $B@5>o$KF0$/$h$&$G$9!#(B

$B<ALd(B2. $B$=$b$=$b!"$3$&$$$&$U$&$K0l$D$N%U%!%$%k%G%#%9%/%j%W%?08$K(B
       $BJ#?t%W%m%;%9$,=PNO$9$k!"$H$$$&$3$H$O9T$J$C$F$b$h$$$N$G$7$g$&$+!#(B

$B$h$m$7$/$*4j$$$7$^$9!#(B
