In a Linux userland program, if I open(2) /dev/null (or do something equivalent, like redirecting stdout to /dev/null), and then write(2) to the resulting handle, how deep into the kernel does my request to write get propagated before being discarded? Does a memory copy of the data happen? Does a kernel context switch happen?
If I use writev(2) against the /dev/null handle instead, is the kernel smart enough to skip walking the passed iovec?
CodePudding user response:
Since null is a char device, a write passes a pointer to the data and a size. write just returns the count passed in, no data copy occurs. See: https://elixir.bootlin.com/linux/v5.18/source/drivers/char/mem.c#L453
