>>143-145
The reason cat on GNU/Linux spits out your line upon "enter" is due to the way the kernel is managing I/O events and buffers, not due to the cat program itself. Christ.
read(2) will block until there's
some input, it doesn't block by block-size. The kernel will attempt to wait for certain block sizes, but it isn't going to wait forever if there's data available but it doesn't match the block size.
It's a detail of the libc / kernel / environment of the OS, not a detail of the userland program.