2014-03-26 16:44 GMT+02:00 Ioan Mihail Stan <[email protected]>:
> > 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
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
