bose писал(а):Наверное в учебных целях этим можно пренебречь, но может лучше если используются приватные данные (мод=3), то туда запихнуть переменную
Всё, что связано с переменной odd (во многих примерах, не только этот) связано с желанием использовать естественный тестер POSIX для операций read() - команду cat, которая 1-м запросом read() сосчитает
весь объём данных (потому, что читает с запасом ;) - 32767 байт), а 2-м запросом должна получить EOF (читать больше нечего)...
И что делать на следующей команде cat? тупо торчать указателем за концом буфера и так же тупо возвращать EOF? (перезагружайте модуль для следующей операции)...
Поэтому, для простоты демонстраций, сделано, что после EOF состояние уже ранее открытого дескриптора восстанавливается в исходное состояние (откуда и имя переменной: odd - чёт-нечет, на 1-м, 3-м, 5-м .... обращении - возвращаем данные, на 2-м, 4-м, 6-м ... - возвращаем EOF).
Любое другое решение сильно усложняло код, оно, может, и сильно кошерно, но до безобразия противно читать, когда детали заслоняют суть обсуждаемого.
P.S. В этом смысле, я до безобразия не люблю книгу "Linux Device Drivers", ещё называемую в народе LDD3, на которую все ссылаются ... как будто других книг никто не видел.
Именно из-за того, о чём я написал, я считаю эту книгу
очень неудачной, из-за того, что их примеры - бесполезны, а без примеров кода всё изложение становится голословным. Их изложение меня просто доводит до бешенства! Насколько лучше:
«Essential Linux Device Drivers», by Sreekrishnan Venkateswaran, Prentice Hall, 2008, p.714.
А уж особенно:
«Writing Linux Device Drivers», Jerry Cooperstein, 2009,
- там берёшь его 2-й том (примеры), и их можно читать без пояснений.
(эти книги есть детально в библиографии в конце текста + к каждой их них URL архивов кодов).
P.P.S. Я ещё раз пересмотрел пример, и понимаю, что это сразу бросилось вам в глаза. И, в принципе, в реале так делать не следует и т.д. - согласен. Но так сделано, мало того что для простоты, ещё и для того, чтобы это было единообразно с предыдущими примерами (довольно многими), чтобы ещё и эти детали не приходилось объяснять ... а читателю ковырять ;).
Так что пусть это место остаётся так, думаю.