<div dir="ltr"><div dir="ltr"><br></div><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Thu, Mar 21, 2019 at 7:05 AM Adrian Șendroiu <<a href="mailto:molecula2788@gmail.com">molecula2788@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">On Thu, 21 Mar 2019 at 03:00, Andreia Ocanoaia via so<br>
<<a href="mailto:so@cursuri.cs.pub.ro" target="_blank">so@cursuri.cs.pub.ro</a>> wrote:<br>
><br>
> Buna dimineata,<br>
> Am si eu o nelamurire. Ce se intampla atunci cand am un fisier care contine mai putin date decat DEFAULT_BUF_SIZE? Mai exact ce ar trebui sa returneze functiile fgetc si fread in cazul in care la ultima citire nu se umple bufferul?<br>
><br>
> Testele 26 si 27 par sa se bata cap in cap. Daca la fgetc returnez imediat cum am depistat sfarsitul fisierului SO_EOF, la fread pare ca trebuie sa detectez ca am X bits cititi in mod valid ( valoare de ret trebuie sa fie 16000), insa nr de syscalluri fiind 5 inseamna ca eu dupa ce ridic flagul de SO_EOF continui sa citesc date invalide si conform testului declar SO_EOF la urmatorul read.<br>
><br>
> Am interpretat eu rau testele?<br>
><br>
> Andreia<br>
<br>
Salut,<br>
<br>
Nu mi-e clar la ce te referi prin "ridic flagul SO_EOF" și "declar SO_EOF".<br>
<br>
În principiu, flagul de EOF pentru un fișier se setează atunci când ai<br>
făcut un read care ți-a returnat 0.<br>
<br>
În acest moment fgetc va întoarce SO_EOF, iar fread va întoarce<br>
numărul de bytes citiți până în acel moment. (sau mai exact numărul de<br>
elemente)<br>
<br>
De ce sunt 5 syscalluri: ai primele 4 care vor citi 4 * 4096 = 16384<br>
bytes. Dar pentru că lui fread i-au fost ceruți 16384+1000 bytes, va<br>
mai încerca încă un read ca să umple din nou bufferul. Acest read<br>
întoarce 0, pentru că fișierul are doar 16384 de bytes. Astfel că<br>
fread va întoarce doar cât a reușit să citească: 16384.<br></blockquote><div>Buna,</div><div><br></div><div>Am rezolvat, gandeam eu dimensiunea bufferului intr-un mod ciudat in care ajungeau sa se faca mai putin syscalluri doar pe cele doua teste.</div><div><br></div><div>Multumesc si o zi faina tuturor,</div><div>Andreia<br></div></div></div>