2014-03-12 0:47 GMT+02:00 Pascu Corneliu Florin <
[email protected]>:

> Salut,
>
> Din ce vad read are urmatoarea declaratie  *ssize_t* read(int fd , void *
> buff, *size_t* len);
> Totul este ok , dar ce se intampla cand fac ceva de genul: *read(fd,
> buff, SIZE_MAX)*;
> SIZE_MAX vad ca este 0xffffffff , iar SSIZE_MAX este 0x7fffffff.  Orice
> read cu len>SSIZE_MAX
> este undefined , right? Atunci de ce este len size_t definit in POSIX si
> nu ssize_t ?
>

Salut, Florin!

* size_t este un tip întreg fără semn
* ssize_t vine de la signed size_t, adică un întreg cu semn

Conceptual, nu poți citi un număr negativ de octeți. Prin urmare al treilea
parametru trebuie să fie un tip întreg, fără semn (size_t). Altfel, dacă
s-ar folosi ssize_t, atunci ai putea specifica un număr negativ.
read() întoarce numărul de octeți citiți (un număr întreg pozitiv), 0 în
caz că nu a citit nimic și -1 în cazul în care a fost o eroare. Deci pentru
valoarea de return, avem nevoie de un tip întreg, cu semn (ssize_t).

Sper că acum e clar de ce antetul read() a fost proiectat așa.

Baftă!
-- 
Răzvan Crainea
_______________________________________________
http://ocw.cs.pub.ro/courses/so/info/lista-discutii

Raspunde prin e-mail lui