Re: Need blocking /dev/null

Ville Herva
2001-11-01T07:24:49Z

On Wed, Oct 31, 2001 at 11:13:22PM +0000, you [Riley Williams] claimed:
> Hi Ville.
>
>
> > Certainly have in the sense that you could theoretically do that in
> > user space.
>
> Are you sure?

In theory, yes.

> > find / -name "wanted-but-lost-download" | eat
>
> Doesn't work - you're piping the stdin there, not stderr as per my
> example above.

Sorry, I wasn't careful enough.

> AFAIK, there's no way to pipe stderr without also piping
> stdout, hence this sort of solution just doesn't work.

One could argue that is a fault of the shell - which again is a userland
thing.

If anything else fails, you could do

% touch y; rm -f x
% ls x y
ls: x: No such file or directory
y
% mkfifo f
% ls x y 2> f & wc -c f
y
33 f
rm f

Which of course isn't pretty, but it's doable. Of course, I'm not arguing
that we should get rid of /dev/null and /dev/zero, but that in theory you
could implement them in userspace.

Come to think of it, the biggest gain from /dev/null and /dev/zero comes
propably when you do memmaps. I'm not actually sure whether you could all
tath without /dev/null and /dev/zero - or you could, but with performance
loss.

> AFAICS, there is no sane alternative to /dev/null in userspace.

Sane is relative...

> > zerofill | head -c 1440k > /tmp/floppy.img
>
> How does zerofill know when to stop writing zeros out? After all, if it
> doesn't write enough out for the head call, then it's no longer an
> equivalent to /dev/zero, and it could easily be called with just about
> ANY positive number of bytes, including an infinite number, as in...
>
> zerofill | tr '\0' '@' > /dev/ttyS1
>
> ...which sends an infinite stream of 0x40 bytes to the serial port.

Of course it writes infinitely. When head terminates the pipe, it exits.
Just try

yes | head -c 10

Or with any characters. It gets SIGPIPE when the other end closes the pipe.

> However...
>
> zerofill 750M > /tmp/img.cd
> zerofill 1440k > /tmp/img.floppy
>
> ...would be a reasonable userspace equivalent to examples (2) and (3)
> respectively, so that certainly could be done in userspace.

That's equivalent to

zerofill | head -c 750M > /tmp/img.cd

Unless I missed something.

-- v --

v@iki.fi