[so] [Tema 2 - Windows] Test 15
Razvan Crainea
razvan.crainea at gmail.com
Wed Mar 26 16:56:36 EET 2014
2014-03-26 16:44 GMT+02:00 Ioan Mihail Stan <stanioanmihail at gmail.com>:
>
> Am si eu o problema legata de testul 15. Nu reusesc sa ma prind ce nu fac
> bine in cod legat de pipe-uri multiple. Aparent pentru comanda cat <
> big_file | cat | cat imi crapa al treilea cat.
>
>> Any hint ?
>>> - am urmat cativa pasi indicati pe IRC:
>>> * asteptarea proceselor abia dupa crearea tuturor
>>> * inchiderea handlerelor asociate pipeului undeva intre wait si comanda
>>>
>>> In alta ordine de idei, testerul local nu stie sa opreasca procesul in
>>> caz ca ruleaza un timp
>>> prea mare si din acest motiv nu am vrut sa ingreunez coada de testare de
>>> pe vmchecker cu varianta mea de windows. Local nu ajung la score report! In
>>> cazul in care nu reusesc sa gasesc eroarea de cod care imi provoaca
>>> blocarea in testul 15, ce e de facut in legatura cu testerul?
>>>
>>
>> Salut!
>>
>> Nu se poate face nimic cu testerul. Atât timp cât implementarea ta este
>> corectă, comanda respectivă ar trebui să meargă.
>> Cel mai probabil, ultimul cat nu se închide din cauză că un alt proces
>> încă mai are capătul de scriere deschis. Presupunerea mea este că ori
>> procesul părinte, ori procesul celui de-al doilea cat.
>> Încearcă să afișezi pid-urile tuturor proceselor (inclusiv ale
>> minishell-ului) și să urmărești cu lsof[1] ce file descriptori are deschis
>> fiecare pid.
>>
>> [1] http://unixhelp.ed.ac.uk/CGI/man-cgi?lsof+8
>>
>> Baftă!
>> --
>> Răzvan Crainea
>>
>> Salut Razvan,
>
> Tema la care am probleme este varianta Windows. Din pacate lsof nu este o
> varianta in conditiile in care cygwin are un numar limitat de comenzi, iar
> instalarea unor pachete noi presupune reinstalarea consolei. Am incercat si
> cu pipe de dimensiune mai mare de "0", suficient de mare zic eu, insa tot
> nu merge ...aparent merge doar pe teste mici dar pe testul 15 crapa si nu
> ajung la score report.
>
Mărirea dimensiunii pipe-ului nu scalează (ce se întâmplă la un cat pe un
fișier1 GB?), deci nu este o soluție completă. _Nu_ vrem să implementați
shell-ul doar să treacă testele. Corect este să lăsați dimensiunea default
și să folosiți cum trebuie capetele pipe-urilor.
Încearcă să-ți printezi ce handlere ai deschise și când anume se deschid.
Ai grijă la situații de genul următor:
HANDLER pipe = CreatePipe()
CreateProcess(1)
CreateProcess(2)
în acest moment, capătul de scriere al pipe-ului este deschis de 3 ori: o
dată din procesul părinte, o dată din procesul 1 și o dată din procesul 2.
Din moment ce doar procesul 1 scrie, celelalte două procese ar trebui să
închidă capătul de write.
Baftă!
--
Răzvan Crainea
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20140326/f0a4f295/attachment.html>
More information about the so
mailing list