The man page (read(2) on linux) says:
Code:
#include <unistd.h>
ssize_t read(int fd, void *buf, size_t count);
...
If count is greater than SSIZE_MAX, the result is unspecified.
This should answer your question: if you want to rely on the result, make sure you never ask for more than SSIZE_MAX bytes....