Ca să faci debugging, testul respectiv rulează programul my_wc.exe

Încearcă să modifici sursa acestui program [1] și să printezi ce
caractere citește de la stdin.

După care poți rula manual: .\_test\bin\test_popen_write.exe

[1] 
https://github.com/systems-cs-pub-ro/so-assignments/blob/master/2-stdio/checker-win/_test/src/my_wc.c

On Wed, 27 Mar 2019 at 08:11, Rares Folea <[email protected]> wrote:
>
> Intradevar, am modificat gresit, imi cer scuze!
>
> Cu cele mentionate mai sus, am reusit sa implementez popen(…, “r”).
> Inca am probleme la popen(…, “w”), la care nu produce rezultatul corect.
> Numarul de apeluri de sistem este corect, dar comunicarea in pipe nu se 
> realizeaza corect.
>
> Am observat insa, ca daca, introduc in fputc un printf “manual”,linia 266, 
> datele se propaga corect prin pipe
> Functionarea este corecta insa doar daca fac printf(“[FPUTC] %c\n”, (unsigned 
> char *) c).
> Daca fac printf(“[FPUTC]\n”) nu mai merge.
>
> De asemenea, nu pare corelat numarul de printfuri.
> Rezultatul este corect si daca folosesc 3 printfuri la rand in functie:
>
> printf(“[FPUTC] %c\n”, (unsigned char *) c)
> printf(“[FPUTC] %c\n”, (unsigned char *) c)
> printf(“[FPUTC] %c\n”, (unsigned char *) c)
>
> Incurc rau de tot handleurile?
>
>
> Multumesc frumos !!!
>
>
> > On 25 Mar 2019, at 22:45, Adrian Șendroiu <[email protected]> wrote:
> >
> > Nu ai modificat cum trebuie. Eu am zis "cmd /C" (nu \C, argumentele
> > toolurilor de windows se dau cu /) și să pui parametrul între
> > ghilimele (nu apostroafe).
> >
> > De asemenea, modul în care faci wait după process pare suspect.
> > WaitForSingleObject se face pe un HANDLE, mai exact hProcess din
> > structura PROCESS_INFORMATION.
> >
> > On Mon, 25 Mar 2019 at 22:10, Rares Folea <[email protected]> wrote:
> >>
> >> In primul rand, multumesc pentru raspuns!
> >>
> >> Am efectuat modificarile, dar acum intampin o problema referitoare la 
> >> terminarea procesului copil in cazul POPEN cu argumentul “r”, iar in cazul 
> >> type = “w”, se obtin date incorecte in fisier. Am epuizat toate metodele 
> >> cunoscute de debugging.
> >>
> >> In cazul POPEN “r”, in terminal mai apare (uneori) mesajul "The process 
> >> tried to write to a nonexistent pipe.”
> >>
> >>
> >>
> >> Multumesc pentru ajutor!
> >>
> >>
> >>
> >>> On 25 Mar 2019, at 20:30, Adrian Șendroiu <[email protected]> wrote:
> >>>
> >>> On Mon, 25 Mar 2019 at 16:55, Rares Folea via so <[email protected]> 
> >>> wrote:
> >>>>
> >>>> Buna ziua!
> >>>>
> >>>> Ma confrunt cu urmatoarea problema:
> >>>> Apelul fread pe un fisier deschis cu POPEN nu reuseste sa citeasca 
> >>>> niciodata.
> >>>>
> >>>> In implementare, am creat pipe-ul, am marcat handlerul de citire din 
> >>>> pipe(hRead) nemostenibil, am setat bInheritHandle = TRUE,
> >>>> am creat procesul nou si am inchis in procesul parinte handlerul de 
> >>>> scriere(hWrite). In acest moment, apelurile Fread din checker
> >>>> nu reusesc sa citeasca.
> >>>>
> >>>> De asemenea, FWRITE desi pare sa execute syscall-urile necesare, nu 
> >>>> produce outputul bun.
> >>>>
> >>>> Implementarea se regaseste pe gitlab, in directorul 
> >>>> /l3-so-assignments/2-stdio/util/win.
> >>>>
> >>>>
> >>>>
> >>>> Multumesc frumos!
> >>>
> >>> Salut,
> >>>
> >>> La prima vedere par să fie mai multe greșeli:
> >>> - pe windows popen trebuie să execute cmd /C, nu sh -c. De asemenea,
> >>> argumentul lui cmd /C trebuie pus între ghilimele
> >>> - al doilea parametru al lui SetHandleInformation trebuie să fie
> >>> HANDLE_FLAG_INHERIT, nu 0.
> >>
>
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui