# Links - [Tutorial for ncurses](https://tldp.org/HOWTO/NCURSES-Programming-HOWTO/helloworld.html) # Построчная буферизация Построчная буферизация означает, что символы не отправляются программе сразу, а сначала накапливаются в буфере пока пользователь не нажмет `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 режима работы: 1. Cooked mode (по умолчанию) Это когда - ввод буферизиуется построчно, пользователь должен нажать Enter, работают сигналы по типу Ctrl-C, Ctrl-Z, работает backspace для редактирования строки. 2. Cbreak mode Это когда: - Ввод передается немедленно, без ожидания Enter; - Сигналы работают; - Нет буферизации по строкам; - Каждый символ доступен сразу после нажатия. 3. Raw mode Это когда: - Ввод передается немедленно; - Полный контроль над всеми клавишами; - Не работают сигналы