Теория функций getchar () и putchar ()

Я работаю через "язык программирования C" K&R, и пример 1.5 поставил меня в тупик:

#include <stdio.h>

/* copy input to output; 1st version */
int main(int argc, char *argv[])
{
    int c;

    while ((c = getchar()) != EOF)
        putchar(c);

    return 0;
}

Я понимаю, что "getchar ()" принимает символ для отображения " putchar ()". Однако, когда я запускаю программу в терминале, почему я могу передать целую строку символов для отображения " putchar ()"?

2 ответов


потому что ваш терминал буферизован. getchar() и putchar() по-прежнему работают только с отдельными символами, но терминал ждет с отправкой символов в программу, Пока вы не введете целую строку. Тогда getchar() получает символ из этого буфера один за другим и putchar() отображает их один за одним.

дополнение: то, что терминал буферизован линией, означает, что он отправляет входные данные в программу при обнаружении символа новой строки. Это, как правило, больше эффективно отправлять блоки данных вместо одного символа за раз. Он также предлагает пользователю возможность редактировать строку перед нажатием enter.

Примечание: буферизация линии может быть отключена путем отключения канонический режим для терминала, а вызов помощью функций setbuf С NULL on stdin.


Да, вы можете писать все, что хотите, пока это не EOF char, клавиатура-специальное устройство ввода-вывода, оно работает непосредственно через BIOS и символы, набранные на клавиатуре, непосредственно вставляются в буфер этот буфер, в вашем случае читается примитивным getchar (), при вводе предложения вы нажимаете данные в буфер, а функция getchar () находится в бесконечном цикле, поэтому это работает.

вы можете задать мне дополнительные вопросы, если вы хотите получить более подробную информацию о том, как работает устройство ввода-вывода.

Ура.