Как использовать псевдотерминалы в Linux с C?
Я пытаюсь понять, как использовать псевдотерминал в linux, по сути, я хочу создать клон telnetd, что я упомянул в более раннем вопросе.
Я понимаю концепцию ведущего и ведомого терминалов, и у меня есть основное понимание того, как использовать системные вызовы в C.
Мой вопрос касается следующего шага после открытия дескриптора подчиненного/основного файла. Как запустить getty в рабстве? Есть ли хорошие ресурсы в сети для использования forkpty(), openpty() или другого API?
Некоторые примеры в C помогут. Это был очень похожий вопрос, но никто не представил никаких примеров.
Ответы
Ответ 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 очень хорошо.