Я писал приложение на C ++, которое передает радиосообщения путем записи в модем, подключенный к последовательному порту. Для этого мне нужно получить дескриптор файла, использующий код вида
fd1=open(“/dev/ttyS0″, O_RDWR | O_NOCTTY | O_NDELAY);
. Это заставило меня задуматься о природе элементов в / dev. Чтобы попытаться понять содержание этих предметов, я попытался
sudo cat /dev/ttyS0
только для того, чтобы получить сообщение
cat: /dev/ttyS0: Input/output error
, которое совсем не помогло моему пониманию. Являются ли эти элементы на самом деле файлом или просто некой ссылкой, позволяющей получить доступ к функциональности драйвера?
Из Проект документации 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).
BLOCKQUOTE>
Ну ... все в Linux - это файл или каталог. Вещи в / dev являются специальными файлами.
Большинство устройств являются блочными или символьными устройствами; Однако существуют другие типы устройств, которые можно создавать. В общем, «блочные устройства» - это устройства, которые хранят или хранят данные, «символьные устройства» можно рассматривать как устройства, которые передают или передают данные. Например, дисководы для гибких дисков, жесткие диски и приводы CD-ROM являются блочными устройствами, в то время как последовательные порты, мыши и параллельные порты принтера являются символьными устройствами. Существует своего рода схема именования, но в подавляющем большинстве случаев это совершенно нелогично.
Устройства определяются по типу, например, «блок» или «символ», а также «старший» и «младший» номер. Старший номер используется для классификации устройства, а младший номер используется для идентификации конкретного типа устройства. Например, все устройства IDE, подключенные к первичному контроллеру, имеют старший номер 3. Главные и подчиненные устройства, а также отдельные разделы дополнительно определяются с помощью младших номеров.
Взято из Linux-Filesystem-Hierarchy
2 варианта:
Попробуйте
cat < /dev/ttyS0
и посмотрим, сработает ли это.
Вы можете решить эту ошибку, добавив своего пользователя в ту же группу (т. Е. dialout
).