est ici un peu de C-partout pour le frai et la communication avec des programmes terminaux sous Linux (et éventuellement d'autres unix)Comment implémenter un émulateur de terminal pour Windows?
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
Je comprends que les fenêtres n'ont pas fork()
ou openpty()
, donc ma question est: Comment atteindre quelque chose de similaire sur Windows?
Si possible, je voudrais voir le montant minimum de travail code C/C++ nécessaire pour effectuer les opérations suivantes:
- Spawn une session interactive cmd.exe utilisant
CreateProcess
- obtenir un ensemble de gère/descripteurs de fichier qui peuvent être utilisés pour lire/écrire des données depuis/vers le processus engendré, de manière à simuler une session de console interactive.
Je n'ai rien trouvé. Je ne comprends pas, comment ce problème est-il lié aux threads? –
Quelle est la fonctionnalité de 'fork'? Pouvez-vous utiliser des threads au lieu d'un processus? –
Non, la fourchette est là pour créer un nouveau processus, puis exécutez le programme terminal –