Așa e. fgetc întoarce un caracter ca unsigned char căruia i se face cast la int. Am modificat și în enunț.
On Sat, 16 Mar 2019 at 18:20, Paul-Stelian Olaru <[email protected]> wrote: > > Uhhhhhh, deci avem și caracterul 0xFF. Care ca (char) devine -1. Care e egal > cu SO_EOF. Care cauzează o terminare prematură a lui so_fwrite. > > > > Mda. Am schimbat castul să nu mai fie la (char) ci la (unsigned char). Now it > works. Acuma testele vor reveni, după ce scot printurile de debug. Voi face > upload pe VMchecker în curând. > > > > From: Paul-Stelian Olaru > Sent: Saturday, March 16, 2019 6:12 PM > To: Adrian Șendroiu; Sisteme de Operare > Subject: RE: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur > so_fclose() > > > > Am observat că la testul 13 îmi rulează doar de 56 de ori so_fputc. Aparent, > este consistent cu eroarea raportată de testul următor. Voi investiga mai > departe. > > > > La so_fclose eu apelez so_fflush(). Deci codul de eroare al lui fclose ar > trebui să fie același cu al lui fflush? > > > > [Oh well, se pare că am reușit cu asta. Deci da, dacă eșuează ori fflush ori > close/CloseHandle returnez eroare; nu-mi pasă de ferror]. Voi investiga mai > departe ce se întâmplă pe testele 13 și 14, de ce pun doar 56 de caractere în > loc de numărul corect. Dacă nu dau de cap, revin cu alt topic. > > > > From: Adrian Șendroiu > Sent: Saturday, March 16, 2019 6:06 PM > To: Paul-Stelian Olaru; Sisteme de Operare > Subject: Re: [so] [SO][Tema 2][Linux]Inconsistență la codul de retur > so_fclose() > > > > On Sat, 16 Mar 2019 at 17:38, Paul-Stelian Olaru via so > > <[email protected]> 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. > > > > _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
