Эмулятор терминала

Модератор: Модераторы разделов

стас
Сообщения: 2

Эмулятор терминала

Сообщение стас »

Подскажите пожалусто как написать эмулятор терминала под Линукс на С/С++.
Я слышал для этого используется функция openpty.
Как её использовать?
Заранее благодарен.
Спасибо сказали:
Аватара пользователя
JaGoTerr
Сообщения: 380

Re: Эмулятор терминала

Сообщение JaGoTerr »

Типичный вопрос. Дело в том, что документация по функции openpty находится в крайне нестандартном месте и найти её практически невозможно, если заранее не знать где она лежит. Я только что спросил у знакомого гуру - он открыл мне секрет. Правда теперь я должен ему за это 100 долларов. Вот такая вот ценная информация. Так вот, сообщаю государственную, можно сказать, тайну:

Код: Выделить всё

man openpty
Спасибо сказали:
TwisT
Сообщения: 265
ОС: Debian

Re: Эмулятор терминала

Сообщение TwisT »

Да лучше пример в гугле поиши, в МАНе толком ничего не написано, только в общих чартах, да и если с языком траблы нифига не поимешь.
Linux user #432536.
Спасибо сказали:
Аватара пользователя
Asgard
Сообщения: 215
Статус: North Valfader

Re: Эмулятор терминала

Сообщение Asgard »

для этого юзаются псевдотерминалы.
алгоритм такой:
1) открываете master terminal device(man getpt || man posix_openpt || open("/dev/ptmx", O_RDWR))
2) unlo'чите терминал(man unlock)
3) получаете имя slave terminal device(man ptsname)
4) делаете fork()
5) в дочернем процессе открываете slave terminal device, используя имя, полученное ptsname
6) в дочернем: отвязываете процесс от терминала(man setsid)
7) в дочерернем: дублируете полученный дескриптор слейва в STDIN_FILENO, STDERR_FILENO и STDEOUT_FILENO (man dup2)
8) дальше(в том же дочернем процессе) идёт что-то вроде execl("/bin/bash", ..., NULL);
9) в дочернем: закрываем слейв
10) далее восновном процессе с помощью select совершаем нужные нам манипуляции с вводом/выводом
sator arepo tenet opera rotas ;)
------------------------------------------------------------
LJ
Спасибо сказали: