On Thu, Mar 21, 2019 at 7:05 AM Adrian Șendroiu <[email protected]> wrote:
> On Thu, 21 Mar 2019 at 03:00, Andreia Ocanoaia via so > <[email protected]> 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
_______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
