top | item 32140376

(no title)

_krii | 3 years ago

Tangent: It frustrates me that it's apparently impossible to implement cat(1) in a truly portable way.

The problem is supporting unbuffered I/O (`cat -u`). Standard C simply can't do it. setvbuf(3) allows you to change the buffering on an I/O stream, but then fread(3) only allows you to read exact-sized blocks of data. You can only get a short read on EOF or error. So there is no way to say "give me as much data as is available, up to X amount of bytes" and therefore no way to implement unbuffered cat(1) efficiently using only ISO C. You need POSIX for that.

discuss

order

No comments yet.