Что именно представляют собой элементы в каталоге /dev?

Я писал приложение на C++, которое передает радиосообщения путем записи на модем, подключенный к последовательному порту. Для этого мне нужно получить дескриптор файла, используя код вида

fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);

Это заставило меня задуматься о природе элементов в /dev. Чтобы попытаться понять содержание этих предметов, я попробовал

sudo cat /dev/ttyS0

только чтобы получить сообщение

cat: /dev/ttyS0: Input/output error

что совсем не помогло моему пониманию. Являются ли эти элементы на самом деле файлом или просто некой ссылкой, которая позволяет получить доступ к функциональности драйвера?

2 ответа

Решение

Все в Linux- это файл или каталог. Вещи в /dev это специальные файлы.

Большинство устройств являются блочными или символьными устройствами; Однако существуют другие типы устройств, которые можно создавать. В общем, "блочные устройства" - это устройства, которые хранят или хранят данные, "символьные устройства" можно рассматривать как устройства, которые передают или передают данные. Например, дисководы для гибких дисков, жесткие диски и приводы CD-ROM являются блочными устройствами, в то время как последовательные порты, мыши и параллельные порты принтера являются символьными устройствами. Существует своего рода схема именования, но в подавляющем большинстве случаев это совершенно нелогично.

Устройства определяются по типу, например, "блок" или "символ", "старший" и "младший" номер. Старший номер используется для классификации устройства, а младший номер используется для идентификации конкретного типа устройства. Например, все устройства IDE, подключенные к первичному контроллеру, имеют старший номер 3. Главные и подчиненные устройства, а также отдельные разделы дополнительно определяются использованием младших номеров.

Взято из Linux-файловой системы-иерархии


2 варианта:

  1. Пытаться

     cat < /dev/ttyS0
    

    и посмотреть, если это работает.

  2. Вы можете решить эту ошибку, добавив своего пользователя в ту же группу (т.е. dialout).

Из Проекта документации Linux:

Компьютер считает каждый последовательный порт "устройством". Иногда его называют терминальным устройством, так как когда-то терминалы были наиболее распространенным использованием последовательного порта. Для каждого такого последовательного порта есть специальный файл в каталоге /dev (device). /dev/ttyS0) - это специальный файл для последовательного порта, известного как COM1 в мире DOS/Windows.

Чтобы отправить текст в терминал, вы можете перенаправить стандартный вывод какой-либо команды командной строки в соответствующий специальный файл. Например, ввод "echo test > /dev/ttyS1" в командной строке должен отправить слово "test" терминалу на ttyS1 (COM2), если у вас есть разрешение на запись в /dev/ttyS1. Аналогично, ввод "cat my_file > /dev/ttyS0" отправит содержимое файла my_file на COM1 (ttyS0).

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