2 KiB
2 KiB
Links
Построчная буферизация
Построчная буферизация означает, что символы не отправляются программе сразу, а сначала накапливаются в буфере пока пользователь не нажмет Enter.
Визуальное описание выглядит примерно так:
Режим cooked
Пользователь печатает: h e l l o [backspace] [backspace] i
Что видит пользователь: helli
Буфер терминала: helli
↓ [Enter]
Программа получает: "helli\n" (только после Enter!)
Режим cbreak
Пользователь печатает: h
Программа получает: 'h' ← сразу!
Пользователь печатает: e
Программа получает: 'e' ← сразу!
Пользователь печатает: l
Программа получает: 'l' ← сразу!
Режимы инициализации
raw() vs cbreak()
У терминалов есть 3 режима работы:
- Cooked mode (по умолчанию) Это когда - ввод буферизиуется построчно, пользователь должен нажать Enter, работают сигналы по типу Ctrl-C, Ctrl-Z, работает backspace для редактирования строки.
- Cbreak mode Это когда:
- Ввод передается немедленно, без ожидания Enter;
- Сигналы работают;
- Нет буферизации по строкам;
- Каждый символ доступен сразу после нажатия.
- Raw mode
Это когда:
- Ввод передается немедленно;
- Полный контроль над всеми клавишами;
- Не работают сигналы