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

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

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

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

sudo cat /dev/ttyS0

только для того, чтобы получить сообщение

cat: /dev/ttyS0: Input/output error

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

7
задан 18 July 2012 в 22:09

2 ответа

Из Проект документации 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).

0
ответ дан 18 July 2012 в 22:09

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

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

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

Взято из Linux-Filesystem-Hierarchy


2 варианта:

  1. Попробуйте

     cat < /dev/ttyS0
    

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

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

0
ответ дан 18 July 2012 в 22:09

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

Похожие вопросы: