In this example, we're going to create a resource manager called /dev/atoz that will be a directory resource manager. It's going to manifest the files /dev/atoz/a through to dev/atoz/z, with a cat of any of the files returning the uppercase letter corresponding to the filename. Here's a sample command-line session to give you an idea of how this works:
# cd /dev # ls atoz null ptyp2 socket ttyp0 ttyp3 enet0 ptyp0 ptyp3 text ttyp1 zero mem ptyp1 shmem tty ttyp2 # ls -ld atoz dr-xr-xr-x 1 root 0 26 Sep 05 07:59 atoz # cd atoz # ls a e i m q u y b f j n r v z c g k o s w d h l p t x # ls -l e -r--r--r-- 1 root 0 1 Sep 05 07:59 e # cat m M# cat q Q#
The example above illustrates that the directory atoz shows up in the /dev directory, and that you can do an ls of the directory itself and cd into it. The /dev/atoz directory has a size of 26, which is the number that we selected in the code. Once in the atoz directory, doing another ls shows the contents: the files a through z. Doing an ls of a particular file, say e, shows that the file is readable by all (the -r--r--r-- part) and is one byte in size. Finally, doing a few random cat's shows that the files indeed have the stated contents. (Note that since the files contain only one byte, there's no linefeed after the character is printed, which is why the prompt shows up on the same line as the output.)
Now that we've seen the characteristics, let's take a look at the code, which is organized into the following functions:
Note that while the code is broken up here into several short sections with text, you can find the complete version of atoz.c in the Sample Programs appendix.