Короткий ответ: это возможно, только если у вас есть физическая файловая система /dev
(и если вы используете современный дистрибутив Linux, вы, вероятно, этого не сделаете).
Длинный ответ следует:
Все это восходит к оригинальной философии UNIX, согласно которой все является файлом. Эта философия является частью того, что сделало UNIX таким универсальным, потому что вы могли напрямую взаимодействовать с устройствами из пользовательского пространства, не нуждаясь в специальном коде в вашем приложении, чтобы напрямую взаимодействовать с физическим оборудованием.
Изначально это /dev
был просто еще один каталог с известным именем, куда вы помещали файлы своего устройства. Некоторые системы UNIX все еще используют этот подход (я полагаю, что OpenBSD все еще делает), и вы обычно можете сказать, если система похожа на это, потому что у нее будет много файлов устройств для устройств, которых система на самом деле не имеет (например, файлы для каждого возможный раздел на каждом возможном диске). Это экономит место в памяти и время при загрузке за счет использования немного большего дискового пространства, что было хорошим компромиссом для ранних систем, поскольку они, как правило, были очень ограничены в памяти и не очень быстрыми. Это обычно называется наличием статического электричества /dev
.
В современных системах Linux (и я полагаю также, что FreeBSD и, возможно, последние версии Solaris), /dev
это временная файловая система в памяти, заполняемая ядром (или udev, если вы используете Systemd, потому что они не доверяют ядру делать почти все) , Это экономит место на диске за счет некоторого объема памяти (обычно менее нескольких МБ) и очень незначительных накладных расходов на обработку. Он также имеет ряд других преимуществ, одним из которых является то, что проще обнаруживать аппаратные средства с «горячей» заменой. Обычно это называется динамикой /dev
.
Однако в обоих случаях доступ к узлам устройства осуществляется через обычный уровень VFS, что по определению означает, что у них должен быть индекс (даже если это виртуальный, который просто существует, чтобы подобные вещи работали так, как stat()
это должно быть. С практической точки зрения, это оказывает нулевое влияние на системы, которые используют динамические, /dev
потому что они просто хранят иноды в памяти или генерируют их по мере необходимости, и почти нулевое воздействие, где /dev
статично, потому что иноды занимают почти нулевое пространство на диске, и большинство файловых систем либо не имеют верхнего предела их или обеспечение гораздо больше, чем кто-либо может понадобиться.