Что является противоположностью `mknod`?
Я учусь писать драйверы символьных устройств из Руководства по программированию модуля ядра и использовал mknod
создать узел в /dev
поговорить с моим водителем.
Тем не менее, я не могу найти какой-либо очевидный способ удалить его, проверив man-страницу и заметив, что rmnod
это несуществующая команда
Как правильно изменить эффект mknod
и безопасно удалить узел, созданный в /dev
?
2 ответа
Правильная команда просто rm
:)
Узел устройства, созданный mknod
это просто файл, который содержит старший и младший номер устройства. Когда вы обращаетесь к этому файлу в первый раз, Linux ищет драйвер, который рекламирует этот мажор / минор, и загружает его. Затем ваш драйвер обрабатывает все операции ввода-вывода с этим файлом.
Когда вы удаляете узел устройства, применяется обычное поведение файла Un*x: Linux будет ждать, пока не останется больше ссылок на файл, а затем он будет удален с диска.
Ваш водитель действительно ничего этого не замечает. Linux не выгружает модули автоматически. Ваш водитель просто больше не будет получать запросы ни на что. Но он будет готов в случае, если кто-нибудь воссоздает узел устройства.
Вы, вероятно, ищете функцию, а не команду. unlink() является ответом. unlink() удалит файл / специальный файл, если файл не открыт ни на одном из процессов. Если какой-либо процесс имеет открытый файл, то файл будет оставаться до тех пор, пока последний дескриптор файла, ссылающийся на него, не будет закрыт. Подробнее читайте здесь: http://man7.org/linux/man-pages/man2/unlink.2.html