[so] [Tema2][Linux] Neclaritate eof

Adrian Șendroiu molecula2788 at gmail.com
Thu Mar 21 07:04:59 EET 2019


On Thu, 21 Mar 2019 at 03:00, Andreia Ocanoaia via so
<so at cursuri.cs.pub.ro> wrote:
>
> Buna dimineata,
> 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?
>
> 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.
>
> Am interpretat eu rau testele?
>
> Andreia

Salut,

Nu mi-e clar la ce te referi prin "ridic flagul SO_EOF" și "declar SO_EOF".

În principiu, flagul de EOF pentru un fișier se setează atunci când ai
făcut un read care ți-a returnat 0.

În acest moment fgetc va întoarce SO_EOF, iar fread va întoarce
numărul de bytes citiți până în acel moment. (sau mai exact numărul de
elemente)

De ce sunt 5 syscalluri: ai primele 4 care vor citi 4 * 4096 = 16384
bytes. Dar pentru că lui fread i-au fost ceruți 16384+1000 bytes, va
mai încerca încă un read ca să umple din nou bufferul. Acest read
întoarce 0, pentru că fișierul are doar 16384 de bytes. Astfel că
fread va întoarce doar cât a reușit să citească: 16384.


More information about the so mailing list