Последние три аргумента — тип, основной, второстепенный. Они определяют, что на самом деле представляет собой устройство; имя является условным, но не определяет функциональность. Если вы создадите его как /dev/wubbalubbadubdub
, он все равно будет /dev/random
, пока тип, мажор, минор говорит, что это так.
Тип c
представляет собой символьное устройство (, а не блочное устройство ).
Старшие/младшие числа — это, по сути, магические числа. Нет никакого способа понять их, кроме как обратиться к соответствующей документации по ядру.
https://www.kernel.org/doc/Documentation/admin-guide/devices.txt
Итак, в вашем случае у вас есть символьное устройство, мажор 1, минор 8, которое задокументировано как таковое:
1 char Memory devices
⇑MAJOR ⇓MINOR = /dev/name
1 = /dev/mem Physical memory access
2 = /dev/kmem Kernel virtual memory access
3 = /dev/null Null device
4 = /dev/port I/O port access
5 = /dev/zero Null byte source
6 = /dev/core OBSOLETE - replaced by /proc/kcore
7 = /dev/full Returns ENOSPC on write
8 = /dev/random Nondeterministic random number gen.
9 = /dev/urandom Faster, less secure random number gen.
10 = /dev/aio Asynchronous I/O notification interface
11 = /dev/kmsg Writes to this come out as printk's, reads
export the buffered printk records.
12 = /dev/oldmem OBSOLETE - replaced by /proc/vmcore
Вот и все. Если вы хотите /dev/random
, вы должны использовать c 1 8
. Если вы хотите, чтобы это было /dev/urandom
, это c 1 9
. Вот как это исторически перечислялось в ядре.
В большинстве случаев вы просто используете узлы устройств, предоставленные ядром, devtmpfs, udev или статической структурой /dev вашего дистрибутива; вам редко приходится создавать их самостоятельно, и даже в этом случае для этого могут быть помощники, поэтому вам не нужно вычислять правильные магические числа самостоятельно.
Вы также можете использовать mknod для создания FIFO, но mkfifo для этого будет проще использовать.