Что является противоположностью `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

Другие вопросы по тегам