[so] [SO][Tema 2][Linux]Inconsistență la codul de retur so_fclose()

Adrian Șendroiu molecula2788 at gmail.com
Sat Mar 16 18:05:44 EET 2019


On Sat, 16 Mar 2019 at 17:38, Paul-Stelian Olaru via so
<so at cursuri.cs.pub.ro> wrote:
>
> În cerință nu este foarte clar când ar trebui so_fclose(stream) să returneze 0 și când SO_EOF.
>
>
>
> În teste, văd că după o eroare la fgetc/fread ar trebui să returneze 0 și după o eroare la fputc/fwrite ar trebui SO_EOF. Deci codul de retur bănuiesc că nu depinde de so_feof(stream).
>
>
>
> Când mă folosesc de codul de eroare, pică testele pe fread. Când nu mă folosesc de codul de eroare, pică testul pe write_small (got 0, expected -1).

În principiu so_fclose întoarce SO_EOF dacă eșuează vreunul din
apelurile de sistem apelate mai departe de so_fclose.

În cazul testelor ferror_read_small și ferror_read_large, eroarea
apare la apelul so_fread, care încearcă să facă read. La momentul
so_fclose, singurul apel de sistem care se mai face este close, care
nu întoarce nici o eroare.

În schimb, la testul ferror_write_small, so_fwrite nu va face nici un
apel de sistem (totul e scris în buffer). Eroarea este prinsă abia la
so_fclose, care înainte de a închide fișierul va face și un so_fflush,
care la rândul lui va executa apelul de sistem write.

> Also, testul 13 [test_fwrite_huge] spune că am 0 apeluri de sistem write (mă rog, spune read dar hook-ul cred că e pentru write). O să mai fac verificări dar dacă nu rezolv cu asta revin cu un topic separat. Problema este vizibilă și în ce am momentan pe repo și cred că și în cel mai recent upload de pe VMchecker.

Din ce văd, nu îți ajunge deloc în so_fflush ca să facă vreun write.


More information about the so mailing list