<div dir="ltr">OK , am inteles nevoia de a avea un signed pentru iesire ca sa poate da return -1 in caz de eroare .<div>Ce nu intelegeam se reduce la : size_t e unsigned si apartine [0, 4294967296] si</div><div>ssize_t e signed si apartine [-214783647, 214783647] ( am dat printf pe sistemul meu , dar</div>
<div>cred ca sunt definite asa in limits.h). </div><div>Orice read care incearca sa citeasca intre [ 214783647 + 1, 4294967296]</div><div>ar putea face asta din definita read-ului dar ar avea intotdeauna comportament undefined.</div>
<div>Asa este sau ceva imi scapa :)? Mi s-a parut dubios .</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">2014-03-12 9:02 GMT+02:00 Razvan Deaconescu <span dir="ltr"><<a href="mailto:razvan.deaconescu@cs.pub.ro" target="_blank">razvan.deaconescu@cs.pub.ro</a>></span>:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="">Pascu Corneliu Florin <<a href="mailto:pascucorneliuflorin@gmail.com">pascucorneliuflorin@gmail.com</a>> writes:<br>
> Salut,<br>
><br>
</div>> Din ce vad read are urmatoarea declaratie *ssize_t* read(int fd , void *<br>
> buff, *size_t* len);<br>
> Totul este ok , dar ce se intampla cand fac ceva de genul: *read(fd, buff,<br>
> SIZE_MAX)*;<br>
<div class="">> SIZE_MAX vad ca este 0xffffffff , iar SSIZE_MAX este 0x7fffffff. Orice<br>
> read cu len>SSIZE_MAX<br>
> este undefined , right? Atunci de ce este len size_t definit in POSIX si nu<br>
> ssize_t ?<br>
<br>
</div>Clarifică, te rugăm, ultima întrebare. E vorba de parametrul `len' al<br>
apelului `read'? Și întrebi de ce tipul acestuia este `size_t' și nu<br>
`ssize_t'?<br>
<br>
Dacă aceea este întrebarea, `len' este de tipul `size_t' pentru că este<br>
o dimensiune de buffer; dimensiunile sunt tot timpul pozitive. Apelul<br>
`read' întoarce un rezultat în formatul `ssize_t' pentru că este o<br>
valoare de retur. Aceasta poate fi negativă (-1) în caz de eroare sau<br>
pozitivă în cazul unui apel reușit.<br>
<br>
Legat de penultima întrebare, uite ce spune în pagina de manual[1]:<br>
---<br>
If count is greater than SSIZE_MAX, the result is unspecified.<br>
---<br>
<br>
[1] <a href="http://man7.org/linux/man-pages/man2/read.2.html" target="_blank">http://man7.org/linux/man-pages/man2/read.2.html</a><br>
<br>
Răzvan<br>
_______________________________________________<br>
<a href="http://ocw.cs.pub.ro/courses/so/info/lista-discutii" target="_blank">http://ocw.cs.pub.ro/courses/so/info/lista-discutii</a></blockquote></div><br></div>