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. _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
