[so] [Tema2][Linux] Neclaritate eof

Andreia Ocanoaia andreia.ocanoaia at gmail.com
Thu Mar 21 13:19:23 EET 2019


On Thu, Mar 21, 2019 at 7:05 AM Adrian Șendroiu <molecula2788 at gmail.com>
wrote:

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

Am rezolvat, gandeam eu dimensiunea bufferului intr-un mod ciudat in care
ajungeau sa se faca mai putin syscalluri doar pe cele doua teste.

Multumesc si o zi faina tuturor,
Andreia
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20190321/72d96a18/attachment.html>


More information about the so mailing list