Создать файл «специального символа» UNIX

#linux #character #udev

#linux #символ #udev

Вопрос:

Предположим, я хочу создать, в духе /dev / zero, файл /dev / seven, который выдает символ ‘7’ всякий раз, когда из него читается. Как мне следует поступить с чем-то подобным? Нужно ли мне модифицировать ядро?

Ответ №1:

Да, вам потребуется создать драйвер для этого устройства со специальными символами.

Для Linux, я предлагаю вам прочитать в Linux драйверы устройств Джонатан Корбет, Алессандро Рубини, и Greg Kroah-Хартман. (В главе 3 говорится о драйверах символов, но прочтите также по крайней мере первые две главы.)

Комментарии:

1. Хорошо. Итак, мне нужен исходный код ядра и файл, который начинается с «#include <linux /kernel.h>» и т.д.?

2. Вам нужно довольно много вещей, я отредактировал свой пост, снабдив его ссылкой на отличный ресурс для этого. Кстати, если ваш вопрос касался только Linux, пожалуйста, измените его (замените unix на linux).

3. Однако существует также возможность использования драйвера пользовательского режима для чего-то подобного.

Ответ №2:

Драйвер устройства не требуется, специальный файл fifo плюс пользовательская программа, генерирующая поток 7 , прекрасно способны обеспечить такое поведение.

В общем, вам понадобится примерно пятистрочный сценарий оболочки.

Комментарии:

1. По какой-то причине кажется плохой идеей превращать пользовательскую программу, которая просто «while (true); do printf 7; done», в fifo. Неужели моя интуиция не работает? Неужели это действительно не заполонило бы мою память 7-ю цифрами и выдавало бы их только в случае чтения?

2. @koschei: Я думаю, что это ничего не сделает, пока не подключится устройство чтения, затем заполнит буфер записи fifo, затем заблокирует, пока устройство чтения не освободит немного места в fifo. Хотя было бы намного эффективнее напечатать, скажем, тысячу символов в fifo сразу.

Ответ №3:

Здесь приведен краткий пример создания драйвера устройства для Linux, который может помочь вам начать: