[so] help windows pipes

Cibu Cristian so@atlantis.cs.pub.ro
Wed, 29 Oct 2003 15:19:33 +0200


Nope:

CreatePipe(&hChildStdoutRd, &hChildStdoutWr, &saAttr, 0)

hSaveStdout = GetStdHandle(STD_OUTPUT_HANDLE);
SetStdHandle(STD_OUTPUT_HANDLE, hChildStdoutWr)

DuplicateHandle(GetCurrentProcess(), hChildStdoutRd,
        GetCurrentProcess(), &hChildStdoutRdDup , 0,
        TRUE,
        DUPLICATE_SAME_ACCESS);
CloseHandle(hChildStdoutRd)
//creare copil care scrie
//am incercat si direct adica sa redirectez stdin direct in hChildStdoutRd
si acelasi rezultat
//..................................

SetStdHandle(STD_INPUT_HANDLE, hChildStdoutRdDup)
SetStdHandle(STD_OUTPUT_HANDLE, hSaveStdout)
//creare copil care citeste

//refacere stdin, stdout-ul era refacut
SetStdHandle(STD_INPUT_HANDLE, hSaveStdin)

WaitForSingleObject(pp[0],INFINITE);//copilul care scrie
   CloseHandle(p1->hProcess);
   CloseHandle(p1->hThread);
 CloseHandle(hChildStdoutRdDup);
 CloseHandle(hChildStdoutWr);
   WaitForSingleObject(pp[1],INFINITE);//copilul care citeste. AICI! moare
   CloseHandle(p2->hProcess);
   CloseHandle(p2->hThread);

este clar ca din copii nu ma apuc sa inchid stdout sau stdin. deci ar trebui
inchis din parinte. dar dupa cum se vede, am facut asta.

----- Original Message -----
From: "Adrian Stanciu" <sadyc@romus.ro>
To: <so@atlantis.cs.pub.ro>
Sent: Wednesday, October 29, 2003 2:51 PM
Subject: Re: [so] help windows pipes


> Cibu Cristian wrote:
>
> > mai am putin si imi merg pipe-urile in windows. am insa o problema:
> > am creat un tatic care da in executie doi copii. fiecare copil (defapt
> > acelasi executabil) citeste din stdin pana nu mai poate si scrie tot
> > in stdout
> > (ca in exemplul din SDK, deci e acelasi cod).
> >
> > am incercat sa creez un pipe prin care copil1, cand scrie in stdout-ul
> > lui, sa ajunga ce scrie in stdin-ul lui copil 2.
> >
> > pentru asta am creat un pipe anonim in parinte (ca in exemplul din
> > sdk), am redirectionat stdout spre un capat al pipe-ului (capatul
> > corect), am creat primul copil, am refacut stdout, am redirectionat
> > stdin spre celalat capat, am creat al doilea copil si am asteptat sa
> > se termine amandoi copiii. totul merge bine. adica introduc un text in
> > consola, dau enter si imediat imi apare echoul. dau F6 sau ^Z, se
> > opreste primul copil (cel care citea de la tastatura si scria in pipe)
> > dar copiul 2 nu se opreste.
> >
> > Ce credeti ca am gresit?
>
> Cel mai probabil mai ai capatul de pipe in care scrii deschis intr-un
> proces; probabil in programul "tatic".
>
> --Adrian.
>
> _______________________________________________
> so mailing list
> so@atlantis.cs.pub.ro
> http://atlantis.cs.pub.ro/cgi-bin/mailman/listinfo/so
>