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

Maximilian Machedon maximilian.machedon at gmail.com
Thu Aug 16 09:55:32 EEST 2007


    1. Un proces primeste de la sistemul de operare parametri. Pentru ca
acestia sa ajunga la proces, sunt implicati:

a) shell-ul (sau cine lanseaza procesul) care trebuie sa "stie" cati
parametri sunt si ce valoare au

b) API-ul SO, care e diferit pe Linux fata de Windows in ce priveste
modalitatea de a da parametri (vezi documentatia)

c) procesul in sine, care primeste in main lista de parametri (libraria
standard C/C++ face ca acesti parametri sa fie primiti uniform pe toate
sistemele de operare; de exemplu, pentru Visual Studio 2003 vezi fisierul
"C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\crt\src\stdargv.c")

    Incearca si sa rulezi din bash comenzile:
echo 1                            2
echo "1                            2"

    Din raspunsul lui Tavi si cele de mai sus ar trebui sa fie mai clar de
ce se intampla asa in parser.

    2. Pe langa SetHandleInformation, vezi si parametrul "lpStartupInfo" din
CreateProcess; iti ofera o alternativa la modalitatea de redirectare de pe
Linux.

       Max

On 8/15/07, Andrei Ivanes <andrei.ivanes at gmail.com> wrote:
>
> 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; }
>
> 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?
>
> --
> --
> Multumesc,
> Andrei Ivanes 342 C1
> _______________________________________________
> so mailing list
> so at cursuri.cs.pub.ro
> http://cursuri.cs.pub.ro/cgi-bin/mailman/listinfo/so
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://cursuri.cs.pub.ro/pipermail/so/attachments/20070816/05a4eb37/attachment.html


More information about the so mailing list