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
