[so] [Tema2][Win] Eroare la citire POPEN

Paul Olaru olarupaulstelian97 at gmail.com
Wed Mar 27 08:13:46 EET 2019


O fi ceva ce se optimizează aiurea din varii motive? Also, sper că
folosești apeluri de sistem și nu chestii din <stdio.h>.

On Wed, Mar 27, 2019, 08:11 Rares Folea via so <so at cursuri.cs.pub.ro> 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 <molecula2788 at gmail.com>
> 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 <raresfolea97 at gmail.com>
> 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 <molecula2788 at gmail.com>
> wrote:
> >>>
> >>> On Mon, 25 Mar 2019 at 16:55, Rares Folea via so <so at cursuri.cs.pub.ro>
> 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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20190327/405efb8b/attachment.html>


More information about the so mailing list