[so] probleme cu pipe-urile (windows)

Mihai Borobocea mihaiborobocea at gmail.com
Sun Nov 4 18:51:22 EET 2007


Si eu am avut o problema cu pipe-urile in Windows pe care am
rezolvat-o (re)citind in laboratorul de pipe-uri ca trebuie sa am
grija atat la redirectare cat si la mostenire.
Daca am "com1 | com2" eu fac urmatoarele:

- fac capatul de citire nemostenibil
- redirectez stdout
rulez com1
- fac capatul de citire mostenibil din nou

apoi la fel pt com2.

La urma, la fel ca pe Linux, inchid ambele capete ale pipe-ului (in
procesul 'mini-shell-ului', desigur).

P.S.: Daca la tine merge pe majoritatea cazurilor, probabil n-o sa te
ajute, dar poate sunt colegi care se confrunta cu probleme legate de
pipe-uri: eu am descoperit ca implementasem prost cand am scris partea
de wait() si am observat ca desi output-ul era bun, procesele copil nu
terminau de rulat.

P.S.2: Mircea, tu cat de mare faci buffer-ul ala intre pipe-uri? Eu am
lasat 0 (las sistemu' de operare sa se ocupe).

On Nov 4, 2007 6:29 PM, Vlad Cananau <vladk2k at gmail.com> wrote:
> Am o problema foarte ciudata si nu reusesc sa imi dau seama care e cauza.
> in tema mea, daca dau comanda
> ls -l | cat
> totul merge foarte bine; daca, in schimb, dau comanda
> ls --help | cat
> se blocheaza. tema sta pe WaitForSingleProcess, si pot observa in Task
> Manager ls.exe ruland. Daca inchid procesul de aici (End Process), in
> tema imi returneaza cod de iesire 1, dar are outputul corespunzator,
> care e afisat de catre cat. ceva de genul
>
>  > ls --help | cat
> [blocat]
> <End Process>
> ls: exit code 1
> Usage: ls [OPTION]... [FILE]...
> [...]
> Report bugs at...
> cat: exit code 0
>
>  >
>
> acelasi lucru se intampla si cu cat /etc/services | cat.
>
> P.S.: inchid capul de scriere de la pipe inainte sa pornesc procesul de
> citire.
> P.S.2: in orice alt scenariu din teste pipe-urile merg perfect; singura
> problema e la testul 7, unde se blocheaza.


More information about the so mailing list