Selam;
Şöyle olmaz mı?  Process A   , A1 i ve A2 yi yaratacağına Process A   A1
i yaratsın sonra A1  de A2 yi (aslında A12 diyebiliriz :)
Nasıl olsa A2 nin A ile konuşacağı yok. Hem dup  kullanmazsın.

#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>
int main(void) {
        int     fd[2], nbytes;
        pid_t   childpid;
        char    string[] = "Hello, world!\n";
        char    readbuffer[80];

        pipe(fd);

        childpid = fork();

        if(childpid == 0) {               /* child A1 */
                close(fd[0]);
                childpid = fork();
                if (childpid == 0) {      /* child A2 */
                        close(fd[1]);
                        nbytes = read(fd[0], readbuffer,
sizeof(readbuffer));
                        exit(0);
                }

                nbytes = read(fd[0], readbuffer, sizeof(readbuffer));
                write(fd[1], string, (strlen(string)+1));
                scanf("%s",readbuffer);
                exit(0);
        }else {
                close(fd[0]);             /* process A */
                write(fd[1], string, (strlen(string)+1));
        }
        
        return(0);
}




-----Original Message-----
From: Halil Demirezen [mailto:[EMAIL PROTECTED] 
Sent: Wednesday, August 27, 2003 4:53 PM
To: Mehmet Türker
Cc: [email protected]
Subject: Re: dup ve pipe.


Aslen baya bir acik yapmamin sebebi tam manasiyla soru isareti kalmasini
istemedigim icindi. Sanirim cok fazla acik yazinca da cok fazla soru
isareti oluyor :).

kisaca A process i A1 ve A2 processlerini spawn ediyor. A process i 0
numarali file descriptordan geleni A1 e gonderip A1 in A2 processinin 0
inci descriptoruna yazmasi gerekiyor. Bunu pipe kullanarak yapmak cok
genis bir sekilde kullaniliyor. Tabiki pipe in file descriptorlarinin
birine 0 nolu file descriptorunu iliskilendirmek lazim :)

Sanirim boyle daha acik, haklisin. 

Iyi calismalar.

> close(0);
> dup2(0, fd[0]);

Cevap