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

Rares Folea raresfolea97 at gmail.com
Wed Mar 27 08:11:27 EET 2019


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.
>> 



More information about the so mailing list