[so] [SO][Tema2][Linux] read() nu seteaza errno
Paul Olaru
olarupaulstelian97 at gmail.com
Wed Mar 27 11:58:26 EET 2019
Oricum la open ar fi fost ENOENT, EPERM, EIO, la read și write cred că doar
EIO, mă îndoiesc că EINTR va fi acolo, EAGAIN se dă doar la nonblocking...
Chiar și așa, complicat dacă ar fi contat. Deci da, un simplu -1 a
simplificat suficient. Nici ferror din <stdio.h> nu returna ce eroare a
fost nu?
On Wed, Mar 27, 2019, 11:55 Adrian Șendroiu via so <so at cursuri.cs.pub.ro>
wrote:
> Salut,
>
> Da, apelul read este înterceptat de un hook care doar întoarce -1. Am
> decis să nu vă bag și în errno pentru că s-ar fi complicat destul de
> mult implementarea. Cam fiecare funcție poate seta errno la diferite
> valori, ar fi fost mult de implementat și testat.
>
> On Tue, 26 Mar 2019 at 21:36, Paul Olaru via so <so at cursuri.cs.pub.ro>
> wrote:
> >
> > Păi eroarea e una făcută de ei, nu una reală, de-aia errno nu e setat.
> Ei înlocuiesc apelul normal de read cu unul al lor care simulează eroare
> dar omite să seteze și errno.
> >
> > On Tue, Mar 26, 2019, 21:28 George Diaconu <pgn.george at gmail.com> wrote:
> >>
> >> Mersi.
> >> Atunci las sa intoarca 0 sau 1 si nu mai declar tipuri diferite pentru
> erori.
> >> Din ce am inteles eu din testul ferror_read_small ar fi trebuit sa fie
> setat errno, mai ales ca apelul de sistem read() intoarce totusi -1.
> >>
> >>
> >> On Tue, Mar 26, 2019, 21:21 Paul Olaru <olarupaulstelian97 at gmail.com>
> wrote:
> >>>
> >>> Nu îți pasă de errno. read() original setează errno dar erorile
> injectate de checker pe cazul respectiv nu setează.
> >>>
> >>> so_ferror doar spune dacă a fost o eroare (nu putem identifica de ce
> tip).
> >>>
> >>> On Tue, Mar 26, 2019, 20:57 George Diaconu via so <
> so at cursuri.cs.pub.ro> wrote:
> >>>>
> >>>> Salut,
> >>>>
> >>>> Cum spune si subiectul, apelul read(), in momentul in care intoarce
> >>>> -1, nu seteaza si errno. In manual scrie ca ar trebui sa il seteze,
> >>>> dar totusi, secventa urmatoare de cod:
> >>>>
> >>>> long rc = read(...)
> >>>> int code = errno;
> >>>> printf("%d\n", code);
> >>>>
> >>>> afiseaza intotdeauna 0, chiar si atunci cand read() intoarce -1.
> >>>>
> >>>> Am inclus "errno.h", si nu fac nimic ciudat cu errno (cum ar fi sa-l
> redeclar).
> >>>> Am doua intrebari:
> >>>> 1. Nu am inteles eu bine cand e setata valoarea intoarsa de errno?
> >>>> 2. E ok daca imi declar singur mai multe coduri de eroare si le intorc
> >>>> pe acestea in so_ferror()?
> >>>>
> >>>> Multumesc anticipat.
> >>>> _______________________________________________
> >>>> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
> >
> > _______________________________________________
> > http://ocw.cs.pub.ro/courses/so/info/lista-discutii
> _______________________________________________
> http://ocw.cs.pub.ro/courses/so/info/lista-discutii
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://cursuri.cs.pub.ro/pipermail/so/attachments/20190327/38c07ccf/attachment.html>
More information about the so
mailing list