2016-10-19 9 views
2

POSIX определяет text file как:устройства символ должен Linux Terminate чтения() с новой строки

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

POSIX определяет line как

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

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

ответ

1

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

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

1

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

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

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