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?

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

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.


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.


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 http://www.asciitable.com/ 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.)

  • 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. 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! Dec 17 '15 at 0:23

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.