LINUX.ORG.RU

Ответ на: комментарий от staseg

Аналогично.

23:36:19 tia-laptop ~
[ tia ] $ ./tmp 
abracadabra

a
23:36:46 tia-laptop ~
[ tia ] $ bracadabra
bash: bracadabra: команда не найдена

tmp.c:

#include <stdio.h>
#include <unistd.h>
int main()
{
    char c;
    read(0,&c,sizeof(char));
    printf("\n%c\n",c);
    return 0;
}

tiandrey ★★★★★
() автор топика
Ответ на: комментарий от staseg

А без ncurses никак? Слышал, что нужно что-то типа установить неблокирующий режим терминала, но только слышал...

tiandrey ★★★★★
() автор топика

Без ncurses, пользуйтесь на здоровье:

#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <termios.h>

int main()
{
	char c;
	struct termios tty, savetty;
	if (!isatty(0)) // Если stdin - не терминал, то работать смысла нет
	{
		printf("stdin is not a tty!\n");
		return -1;
	}
	printf("Answer y or n: ");
	fflush(stdout); // вывели буфер
	tcgetattr(0, &tty); // получили структуру termios
	savetty = tty; // сохранили
	tty.c_lflag &= ~(ISIG | ICANON);
	// ISIG - when any of the characters  INTR,  QUIT,  SUSP,  or DSUSP are received, generate the corresponding signal.
	// ICANON - enable canonical mode.  This  enables  the  special characters  EOF,  EOL,  EOL2, ERASE, KILL, REPRINT, STATUS, and WERASE, and buffers by lines.
	tty.c_cc[VMIN] = 1;
	tcsetattr(0, TCSAFLUSH, &tty);
	read(0, &c, 1);
	tcsetattr(0, TCSANOW, &savetty);
	if ( c != 'y' && c != 'n')
	{
		printf("\nInvalid reply.\n");
	}
	else
	{
		printf("\n%s\n", c== 'y'?"Yes!":"No!");
	}
	return 0;
}
gizzka ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.