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
