|
|
|
|
|
by derefr
2311 days ago
|
|
pipeline | cat # does nothing
This is actually re-batching stdin into line-oriented write chunks, IIRC. If you write a program to manually select(2) + fread(2) from stdin, then you’ll observe slightly different behaviour between e.g. dd if=./file | myprogram
and dd if=./file | cat | myprogram
On the former, select(2) will wake your program up with dd(1)’s default obs (output block size) worth of bytes in the stdin kernel buffer; whereas, on the latter, select(2) will wake your program up with one line’s worth of input in the buffer.Also, if you have multiple data streams, by using e.g. explicit file descriptor redirection in your shell, ala (baz | quux) >4
...then cat(1) won’t even help you there. No tooling from POSIX or GNU really supports consuming those streams, AFAIK.But it’s pretty simple to instead target the streams into explicit fifo files, and then concatenate those with cat(1). |
|
I've been thinking about this more from the perspective of reusing code from cat than of using the cat binary in multiple contexts. Looking over the thread, it seems like I'm the odd one out here.