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
