Hello,
Once head read enough bytes to satisfy -c option, it stops reading input and quit.
This is different from what -n does and it is also different from both FreeBSD and busybox head implementation.
With GNU Coreutils head:
$ echo -e "123\n456\n789" | { head -n 1; while read a; do echo "-$a-"; done; }
123
$ echo -e "123\n456\n789" | { head -c 4; while read a; do echo "-$a-"; done; }
123
-456-
-789-
$
With all other head implementations I tested:
$ echo -e "123\n456\n789" | { head -c 4 ; while read a ; do echo "-$a-" ; done ; }
123
$
It would make sense to both -n and -c have the same meaning, differing only whether to read bytes or lines.
Regards,
--