Как создать pseudo-tty для чтения вывода и записи во входной

Я рискну утверждения очевидного: Вы вызываете функцию, если она определяется в базовом классе, это автоматически доступно в производном классе (если это не private).

, Если существует функция с той же подписью в производном классе, можно снять неоднозначность его путем добавления имени базового класса, сопровождаемого двумя двоеточиями base_class::foo(...). Необходимо отметить, что в отличие от Java и C#, C++ делает не , имеют ключевое слово для "базового класса" (super или base) начиная с поддержек C++ множественное наследование , который может привести к неоднозначности.

class left {
public:
    void foo();
};

class right {
public:
    void foo();
};

class bottom : public left, public right {
public:
    void foo()
    {
        //base::foo();// ambiguous
        left::foo();
        right::foo();

        // and when foo() is not called for 'this':
        bottom b;
        b.left::foo();  // calls b.foo() from 'left'
        b.right::foo();  // call b.foo() from 'right'
    }
};

Кстати, Вы не можете произойти непосредственно из того же класса дважды, так как не будет никакого способа относиться к одному из базовых классов по другому.

class bottom : public left, public left { // Illegal
};

7
задан Ben Vitale 29 July 2009 в 23:32
поделиться

3 ответа

Ожидаемый уже был упоминается для использования через Tcl, но его также можно использовать без Tcl, рассматривая его как библиотеку C и вызывая API , описанный здесь

1
ответ дан 7 December 2019 в 05:26
поделиться

Вы хотите вызвать forkpty (). На странице руководства:

#include / * для openpty и forkpty * /

pid_t forkpty (int * amaster, char * name, struct termios * termp, struct winsize * winp);

Ссылка на -lutil.

Функция forkpty () объединяет openpty (), fork () и login_tty () с создать новый процесс, работающий в псевдотерминале. Описание файла tor главной стороны псевдотерминала возвращается в мастере, и имя файла подчиненного устройства, если оно не равно NULL. Срок и Параметры winp, если не NULL, будут определять атрибуты терминала и размер окна подчиненной стороны псевдотерминала.

Ваш родительский процесс общается с дочерним процессом, читая и записывая из файлового дескриптора, который forkpty хранит в "мастере" - это называется главным псевдотерминальным устройством. Ребенок просто разговаривает с stdin и stdout, которые подключены к подчиненному псевдотерминальному устройству.

6
ответ дан 7 December 2019 в 05:26
поделиться

Есть пакет под названием "expect", который вы должны использовать. Он использует язык сценариев tcl (произносится щекотка).

http://expect.nist.gov

1
ответ дан 7 December 2019 в 05:26
поделиться
Другие вопросы по тегам:

Похожие вопросы: