[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