Does it have to? I've always been fuzzy on this sort of stuff, but if I have something like:
char buf[256];
read(fd, buf, 256);
write(fd2, buf, 256);
Is there potential for error here, other than the cases where those functions return -1?
If it were to only read 40 characters, would it put a \0 after it? (And would write recognize that \0 and stop? Also, if it were to read 256 characters, is there a \0 after those 256?
No, it doesn't. It just reads.
From
read()
's documentation:read()
might return0
indicating end-of-file.If reading (also from a socket descriptor)
read()
not necessarily reads as much bytes as it was told to do. So in this context do not just test the outcome of read against-1
, but also compare it against the number of bytes the function was told to read.A general note:
Functions do what is documented (at least for proper implementations of the C language). Both your assumptions (autonomously set a 0-termination, detect the latter) are not documented.