[so] [Tema1]Problema parser & nelamurire pipe-uri

Octavian Purdila tavi at cs.pub.ro
Thu Aug 16 07:03:58 EEST 2007


On Wednesday 15 August 2007 10:05, Andrei Ivanes wrote:

Salut,

> 1. [WIN] Exista(?) o problema cu parserul (sau nu stiu sa il folosesc
> calumea):
>
> daca un parametru este intre apostrofi sau ghilimele, parserul nu imi
> da in string-ul parametrului si apostrofii sau ghilimelele, asa ca
> daca ii dau de exemplu:
>
> echo 'int main() { return 0; }'
>
> nu imi dau seama daca parametrul 'int main() { return 0; }' extras de
> parser are sau nu apostrofi sau ghilimele, iar shell-ul meu o sa
> ruleze:
>
> echo int main() { return 0; }
>

Hint:

- pentru echo 'int main() { return 0;}' parserul o sa iti intoarca un arbore 
in care comanda e echo dar ai un singur parametru.
- pentru echo int main() { return 0; } (fara ghililmele) parserul o sa iti 
intoarca un arbore in care comanda e echo si ai 6 parametri.

> 2. [WIN] O nelamurire la Pipe-uri: din ce am inteles trebuie inchis
> (cel putin) capatul de scriere de catre procesul parinte, altfel
> procesul care are capatul de citire din pipe nu termina* (adica
> ReadFile tot asteapta pentru ca handle-ul la capatul de scriere in
> pipe inca mai este deschis de procesul parinte, adica shellul meu). Am
> inteles ca ar trebui facut cu DuplicateHandle, dar imi pare un fel de
> problema chicken and egg:
>
> DuplicateHandle imi cere ca parametru procesul in care sa il copiez,
> care imi este dat de CreateProcess, caruia ii dau ca parametru la
> hStdInput sau hStdOutput unul din capetele pipe-ului duplicat.
>
> Care e solutia?

Ce iti trebuie de fapt, este setarea handler-ului ca fiind inheritable. 
Problema cu close-ul este cu totul alta. Pentru setarea handler-ului ca 
inheritatble:

1. Nu trebuie sa faci neaparat un DuplicateHandle, poti folosi 
SetHandleInformation.

2. Poti folosi DuplicateHandle cu acelasi proces sursa/destinatie.

[iar pentru problema cu close: create pipe, setezi pipe-ul ca inheritable, 
create process, close pipe din procesul parinte - dupa create process]

tavi



More information about the so mailing list