Linux программирование в примерах
Шрифт:
Функция
В этом случае аргументами являются указатель на свободную область буфера, размер оставшейся части буфера и указатель
Комментарии в строках 32–36 очевидны; если встречается нулевой байт, программа выводит сообщение об ошибке и представляет вывод как пустую строку. После компенсирования нулевого байта (строки 30–41) код продолжает работу.
Строки 43–52 увеличивают указатель на участок буфера за только что прочитанными данными. Затем код проверяет, является ли последний прочитанный символ символом конца строки. Конструкция
Если последний символ не был символом конца строки, это означает, что нам не хватило места, и код выходит (с помощью
Строки 54–62 обрабатывают вводимые
До сих пор мы имели дело с механизмом получения в буфер по крайней мере одной полной строки. Следующий участок обрабатывает случай строки с продолжением. Хотя он должен гарантировать, что конечный символ обратного слеша не является частью нескольких обратных слешей в конце строки. Код проверяет, является ли общее число таких символов четным или нечетным путем простого переключения переменной
Если число четное, условие '
С другой стороны, если число нечетно, строка содержит четное число пар обратных слешей (представляющих символы \\, как в С), и конечную комбинацию символов обратного слеша и конца строки. [43] В этом случае, если в буфере остались по крайней мере 80 свободных байтов, программа продолжает чтение в цикле следующей строки (строки 78–81). (Использование магического числа 80 не очень здорово; было бы лучше определить и использовать макроподстановку.)
43
Этот код несет с собой аромат практического опыта, не удивительно было узнать, что более ранние версии просто проверяли наличие обратного слеша перед символом конца строки, пока кто-то не пожаловался, что он не работает, когда в конце строки есть несколько обратных слешей — Примеч. автора.
Гвардия. (Дилогия)
65. В одном томе
Фантастика:
научная фантастика
рейтинг книги
Я все еще царь. Книга XXXI
31. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
рейтинг книги
Латино-Иерусалимское королевство
История крестовых походов
Научно-образовательная:
история
рейтинг книги
Академия
2. Медорфенов
Фантастика:
юмористическая фантастика
попаданцы
аниме
рейтинг книги
12
рейтинг книги
3ds Max 2008
Видеосамоучитель
Компьютеры и Интернет:
программное обеспечение
рейтинг книги
Неудержимый. Книга VI
6. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
рейтинг книги
Попала, или Кто кого
Любовные романы:
современные любовные романы
рейтинг книги
Управленческая элита. Как мы ее отбираем и готовим
Деловая литература:
управление, подбор персонала
рейтинг книги
Том 14. Критические статьи, очерки, письма
14. Собрание сочинений
Документальная литература:
критика
публицистика
рейтинг книги
Философия и культура
Научно-образовательная:
философия
рейтинг книги
В этом мире еще можно удивляться
Любовные романы:
любовно-фантастические романы
рейтинг книги
Газлайтер. Том 18
18. История Телепата
Фантастика:
попаданцы
аниме
фэнтези
рейтинг книги
Шум и ярость
Проза:
классическая проза
рейтинг книги