Returns the number of bytes that were read, which can be less than buf.len. If 0 bytes were read, that means EOF. If fd
is opened in non blocking mode, the function will return error.WouldBlock when EAGAIN is received.
Linux has a limit on how many bytes may be transferred in one read
call, which is 0x7ffff000
on both 64-bit and 32-bit systems. This is due to using a signed C int as the return value, as well as stuffing the errno codes into the last 4096
values. This is noted on the read
man page. The limit on Darwin is 0x7fffffff
, trying to read more than that returns EINVAL. The corresponding POSIX limit is math.maxInt(isize)
.