Если символьные устройства Linux прекращают чтение () с новой строки

POSIX определяет текстовый файл как:

Файл, содержащий символы, организованные в одну или несколько строк.

POSIX определяет строку как

Последовательность, состоящая из нуля или более не начинающихся символов плюс завершающий символ новой строки.

Учитывая это, если read() функция добавления драйвера символьного устройства Linux '\n' в пользовательский буфер, когда он достигает EOF/ больше нет данных?

2 ответа

Решение

Концепция драйверов символов аналогична потоку. В этом свете, read просто возвращает то, что будет доступно дальше. Теперь то, что доступно, обычно будет частью определения устройства, драйвер которого это. Если устройство возвращает символ новой строки, то и драйвер должен. Обратите внимание, что это означает, что устройство будет возвращать новую строку на всех платформах, а не только в Linux.

В общем, интерпретация байтов, возвращаемых read это вопрос более высокого уровня абстракции. С точки зрения политики и механизма, драйвер чар можно рассматривать как обеспечивающий механизм, оставляющий политику более высоким уровням.

В классическом Unix различие между символьными устройствами и блочными устройствами заключается в том, что блочные устройства поддерживают поиск, что подразумевает их адресуемость в единицах дисковых блоков фиксированного размера. Символьные устройства не поддерживают поиск, они просто доставляют или принимают поток символов.

В Linux драйвер устройства реализован в виде структуры, содержащей некоторые флаги и параметры, а также набор указателей на функции, реализующий методы read()/write()/etc. Блочные (дисковые) драйверы также реализуют seek() и, возможно, даже mmap().

Обычно драйверы устройств не влияют на фактический передаваемый контент, они только перемещают байты или блоки на устройство и с него, используя (аппаратный) протокол, который необходим устройству (например, манипулирование регистрами внутреннего контроля, проверка регистров состояния)...)

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