В Unix-подобной системе вы можете добиться этого, изменив терминал на неканонический режим ввода. Терминал поддерживает канонический ввод , который собирает всю строку для редактирования до нажатия символа конца строки или Ctrl-D
. В результате приложение часто видит целую строку в системных вызовах read (). С другой стороны, неканонический ввод не выполняет буферизацию строки; вводимые символы становятся доступными для программы, как только они набраны.
Вот пример Linux C / C ++, как программно установить флаг -icanon
( неканонический ).
#include <iostream>
#include <termios.h>
#include <unistd.h>
int main() {
struct termios old_tio, new_tio;
tcgetattr(STDIN_FILENO, &old_tio);
new_tio = old_tio;
new_tio.c_lflag &= (~ICANON);
tcsetattr(STDIN_FILENO, TCSANOW, &new_tio);
char c;
while (fread(&c, 1, 1, stdin))
std::cout << c << std::endl;
return 0;
}