Подтвердить что ты не робот

Как использовать псевдотерминалы в Linux с C?

Я пытаюсь понять, как использовать псевдотерминал в linux, по сути, я хочу создать клон telnetd, что я упомянул в более раннем вопросе.

Я понимаю концепцию ведущего и ведомого терминалов, и у меня есть основное понимание того, как использовать системные вызовы в C.

Мой вопрос касается следующего шага после открытия дескриптора подчиненного/основного файла. Как запустить getty в рабстве? Есть ли хорошие ресурсы в сети для использования forkpty(), openpty() или другого API?

Некоторые примеры в C помогут. Это был очень похожий вопрос, но никто не представил никаких примеров.

4b9b3361

Ответ 1

Расширенное программирование в среде Unix, 2nd Edition имеет превосходную главу о псевдотерминальном уровне, доступном в Linux. Лучшая часть - это исходный код, который содержит драйвер pty и очень четко демонстрирует, как использовать интерфейсы pty. (Программа pty, которую она создает, полезна сама по себе, если вы хотите программно программировать только терминал, но не хотите использовать expect(1).)

Ответ 2

включить

#include <sys/stat.h>

#include <fcntl.h>

#define _XOPEN_SOURCE

#include <stdlib.h>

int main(int argc, char **argv) 
{
char *slavename;
int masterfd;
masterfd = open("/dev/ptmx", O_RDWR);
grantpt(masterfd);
unlockpt(masterfd);
slavename = ptsname(masterfd);
...
}

Я опубликовал простой пример демонстрации концепции подчиненного подчинения псевдотерминала. перейдите по этой ссылке, чтобы получить четкое представление о терминалах в Linux http://www.linusakesson.net/programming/tty/

Ответ 3

Вы не хотите получить getty для ptys. Getty - это только "слушающая" часть процесса. Для жестких терминалов каждое отдельное терминальное устройство постоянно "прослушивает". Для telnet демона выполняет часть прослушивания (в сокете) и обрабатывает запрос на соединение, создавая пару pty и fork() ing/exec() ing. И действительно: APUE обрабатывает ptys очень хорошо.