Что именно представляют собой элементы в каталоге /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 варианта:
Пытаться
cat < /dev/ttyS0
и посмотреть, если это работает.
Вы можете решить эту ошибку, добавив своего пользователя в ту же группу (т.е.
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).