Когда вы печатаете, консоль получает вывод с клавиатуры, возвращая его вам.
getchar()
работает с входным потоком, который обычно настраивается с включенным «Каноническим входом».Такая конфигурация сокращает время ЦП, затрачиваемое на опрос ввода для схемы буферизации, где ввод буферизуется, пока не произойдут определенные события, которые сигнализируют о расширении буфера.Нажатие клавиши ввода (и нажатие кнопки управления D), как правило, очищают этот буфер.
#include <unistd.h>
int main(void){
int c;
static struct termios oldt;
static struct termios newt;
/* Fetch the old io attributes */
tcgetattr( STDIN_FILENO, &oldt);
/* copy the attributes (to permit restoration) */
newt = oldt;
/* Toggle canonical mode */
newt.c_lflag &= ~(ICANON);
/* apply the new attributes with canonical mode off */
tcsetattr( STDIN_FILENO, TCSANOW, &newt);
/* echo output */
while((c=getchar()) != EOF) {
putchar(c);
fflush(STDOUT_FILENO);
}
/* restore the old io attributes */
tcsetattr( STDIN_FILENO, TCSANOW, &oldt);
return 0;
}