Вот немного шаблона C для создания и связи с терминальными программами в Linux (и, возможно, в других Unix-системах)
int master, slave;
struct winsize wsize = {24, 80, 0, 0}; // 24 rows and 80 columns
if (openpty(&master, &slave, NULL, NULL, &wsize) < 0)
die("Failed to open the pty master/slave");
if (!fork()) {
// child, set session id and copy the pty slave to std{in,out,err}
setsid();
dup2(slave, STDIN_FILENO);
dup2(slave, STDOUT_FILENO);
dup2(slave, STDERR_FILENO);
close(master);
close(slave);
// then use one of the exec* variants to start executing the terminal program
}
// parent, close the pty slave
close(slave);
// At this point, we can read/write data from/to the master fd, and to the child
// process it would be the same as a user was interacting with the program
Я понимаю, что в окнах нет fork()
или openpty()
, поэтому мой вопрос: как добиться чего-то подобного в окнах?
Если возможно, я хотел бы увидеть минимальное количество рабочего кода C/C++, необходимого для выполнения следующих действий:
- Создайте интерактивный сеанс cmd.exe, используя
CreateProcess
- Получите набор дескрипторов/файловых дескрипторов, которые можно использовать для чтения/записи данных из/в порожденный процесс таким образом, чтобы имитировать сеанс интерактивной консоли.
fork
? Можно ли использовать потоки вместо процесса? - person Thomas Matthews   schedule 25.07.2014