Попробуйте это:
#include <stdio.h>
int main(int argc, char *argv[])
{
char ch;
printf("I'm now going to block until you press something and then return... ");
ch = getchar();
if (ch >= 0)
printf("\nYou pressed %c\n", ch);
else
printf("\nAliens have taken over standard input! Run!\n");
return 0;
}
getchar()
приведет к тому, что ваша программа перейдет в спящий режим до тех пор, пока не будет получено прерывание клавиатуры (или что-либо еще подключенное к stdin). Это означает, что он блокируется, дополнительный код не будет выполняться, пока не вернется getchar()
.
Очень, очень полезно взглянуть на возвращаемое значение функции, чтобы понять его.
Любая функция может блокироваться, если она не обеспечивает какой-либо механизм предотвращения блокировки. Например, open()
допускает флаг O_NONBLOCK
, который полезен для открытия медленно реагирующих устройств, таких как модемы. Короче говоря, если он получает входные данные от терминала или должен ждать ответа от ядра или какого-либо устройства, есть очень хороший шанс, что он может заблокировать.