Как уже отмечалось, такие файлы создаются либо системой, либо периферийными устройствами вашей машины. Мы также упоминали, что содержимое файлов блочного режима буферизуется, а файлы символьного режима не буферизуются. Чтобы продемонстрировать это, вставьте дискету в дисковод и дважды введите следующую команду:
$ dd if=/dev/fd0 of=/dev/null
Вы должны были увидеть следующее: при первом запуске команды было прочитано все содержимое дискеты. После второго запуска команды обращения к дисководу не было вообще. Это происходит потому, что содержимое дискеты было буферизовано при первом выполнении команды — а вы ничего не изменяли на дискете перед вторым запуском команды.
А теперь, если вы хотите распечатать большой файл таким способом (да, это будет работать):
$ cat /большой/пригодный/для/распечатки/файл/где-то >/dev/lp0
Выполнение команды займет столько
времени, сколько ей потребуется,
независимо от того, сколько раз вы ее
запускали: один, два или пятьдесят. Это
связано с тем, что /dev/lp0
- это
файл символьного режима и его содержимое
не буферизуется.
Явление буферизации файлов блочного
режима обладает хорошим побочным
эффектом: буферизуется не только чтение,
но и запись. Это позволяет записи на диск
выполняться асинхронно: когда вы
записываете на диск файл, операция самой
записи не происходит немедленно. Она
произойдет тогда, когда ядро Linux
решит выполнить запись на устройство.
Конечно, если вам нужно переопределить
это для определенной файловой системы,
взгляните на опции sync
и
async
на странице руководства
mount(8), а
также на Раздел 7, «Атрибуты файлов» для получения
более подробной информации.
И в заключение, каждый специальный файл имеет старший и младший номера. В информации, выводимой командой ls -l они отображаются на месте размера файла, т.к. размер для таких файлов носит несущественный характер:
$ ls -l /dev/hdc /dev/lp0 brw-rw---- 1 queen cdrom 22, 0 Feb 23 19:18 /dev/hdc crw-rw---- 1 root root 6, 0 Feb 23 19:17 /dev/lp0
Here, the major and minor of /dev/hdc
are 22 and 0,
whereas for /dev/lp0
, they are 6 and 0. Note that
these numbers are unique per file category, which means that there can be a
character mode file with major 22 and minor 0 , and similarly, there can be a
block mode file with major 6 and minor 0. These numbers exist for a simple
reason: it allows the kernel to associate the correct operations to these
files (that is, to the peripherals these files refer to): you don't handle a
floppy drive the same way as, say, a SCSI hard drive.