[so] SIZE_MAX vs SSIZE_MAX
Razvan Deaconescu
razvan.deaconescu at cs.pub.ro
Wed Mar 12 09:02:18 EET 2014
Pascu Corneliu Florin <pascucorneliuflorin at gmail.com> writes:
> 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 ?
Clarifică, te rugăm, ultima întrebare. E vorba de parametrul `len' al
apelului `read'? Și întrebi de ce tipul acestuia este `size_t' și nu
`ssize_t'?
Dacă aceea este întrebarea, `len' este de tipul `size_t' pentru că este
o dimensiune de buffer; dimensiunile sunt tot timpul pozitive. Apelul
`read' întoarce un rezultat în formatul `ssize_t' pentru că este o
valoare de retur. Aceasta poate fi negativă (-1) în caz de eroare sau
pozitivă în cazul unui apel reușit.
Legat de penultima întrebare, uite ce spune în pagina de manual[1]:
---
If count is greater than SSIZE_MAX, the result is unspecified.
---
[1] http://man7.org/linux/man-pages/man2/read.2.html
Răzvan
More information about the so
mailing list