Linux — создание псевдо-терминала в C ++, который может использоваться другими программами

Я создал псевдотерминал в C ++, используя следующий код:

int main(int, char const *[])
{
int master, slave;
char name[1024];
char mode[] = "0777"; //I know this isn't good, it is for testing at the moment
int access;

int e = openpty(&master, &slave, &name[0], 0, 0);
if(0 > e) {
std::printf("Error: %s\n", strerror(errno));
return -1;
}

if( 0 != unlockpt(slave) )
{
perror("Slave Error");
}

access = strtol(mode, 0, 8);

if( 0 > chmod(name, access) )
{
perror("Permission Error");
}

//std::cout << "Master: " << master << std::endl;
std::printf("Slave PTY: %s\n", name);

int r;
prompt = "login: ";

while(true)
{
std::cout << prompt << std::flush;
r = read(master, &name[0], sizeof(name)-1);
checkInput(name);
name[r] = '\0';
std::printf("%s", &name[0]);
std::printf("\n");
}

close(slave);
close(master);

return 0;
}

Это работает довольно хорошо в том смысле, что из другого терминала я могу сделать:

printf ‘username’> / dev / pts / x

и он будет отображаться и обрабатываться как следует.

У меня вопрос: когда я пытаюсь использовать экран, на экране терминала ничего не появляется. Затем, когда я печатаю, он попадает к моему рабу по 1 символу за раз.

Кто-нибудь знает почему это? Или как я могу это исправить.

Я могу предоставить более подробную информацию, если требуется.

Спасибо 🙂

0

Решение

Потому что вы не очищаете буфер после использования printf,

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]