Det normala är att man tar en buffert som är rimligt stor för det man tänker sig läsa, säg 4kB kanske, och bara läser. Som returvärde får man hur många bytes som det fanns att läsa och som fyllts i.
Alltså så här:
#define BUFLEN 4096
char[BUFLEN] buf;
int len;
len = read (fd, buffer, BUFLEN);
if (len == -1) {
return -1;
}
buf[len] = '\0';