Pascu Corneliu Florin <[email protected]> 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 _______________________________________________ http://ocw.cs.pub.ro/courses/so/info/lista-discutii
