Super User is a question and answer site for computer enthusiasts and power users. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I read the mknod man page, which is (as far as I can tell) what you would use to make a character device like /dev/zero, but I don't see how you would get it to yield an infinite stream of zero bits (or another pattern). What is the procedure for creating such character devices?

share|improve this question
They're implemented in the kernel. Look at zero_lseek, read_zero, write_zero, mmap_zero in drivers/char/mem.c. – David Schwartz Oct 1 '12 at 7:04
Oh…so I would have to modify the kernel? – Blacklight Shining Oct 1 '12 at 7:07
Not necessarily, it depends on precisely what you want to do. Most likely, you would at least need to implement a module. – David Schwartz Oct 1 '12 at 7:18
What about /dev/one? – Blacklight Shining Oct 1 '12 at 7:45
up vote 3 down vote accepted

All mknod does is associate a device file with a device driver. There are device drivers that implement interaction with actual devices, and there are device drivers that just react to read-write requests in useful ways. If you want to you can sit down and write a driver that returns the lyrics of the Star Spangeled Banner. But it's a matter of coding, not finding the right arguments for mknod.

share|improve this answer

mknod creates the device node, but the VFS detects accesses to the device node and reroutes them to the appropriate driver within the kernel for handling. All device nodes, from /dev/null to /dev/sdX to /dev/ttyXX to /dev/videoX are handled this way.

share|improve this answer

If you just want to re-create the /dev/zero abilities but with a character other than zero/null, you can use tr to change all the zero's ("\000" in octal) into something else.

So to spit out an endless stream of "a"s for example, you could do:

cat /dev/zero | tr "\000" "\141" | head -c 20

Or skip the cat and output an M's worth (1024*1024) with

head -c 1M /dev/zero |tr "\000" "\141"

"\141" being the "a" character.

See this site for a quick short page of ASCII - Octal codes. It's actually this image here:
enter image description here

(I know, old "solved" question, but I found it while searching for an endless stream of different characters, so this "solves" the "how to make /dev/one or /dev/[different character]" problem.)

share|improve this answer
I dunno…based on unscientific I-just-tried-it-right-now, head | tr >file has varying degrees of overhead. Depending on the system, it takes either one, one and a half, or two times as long as just head >file. – Blacklight Shining Dec 16 '15 at 9:56
So it does, tr's a workhorse I guess. Trying head -c 3G ... > /dev/null took under a second, but adding the pipe to tr took 21 seconds. Still about 150mb/sec so probably faster than most hard drives could keep up to. But it works, and there is no built-in /dev/one or /dev/a, etc – Xen2050 Dec 16 '15 at 16:04
Hence my asking after one! – Blacklight Shining Dec 17 '15 at 0:23

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .