Tastatureingabe simulieren
-
Hiho,
ich bin nicht wirklich der Linux-Spezi und hätte eine Frage bezüglich des Tastaturstroms. Ausgangspunkt ist ein Fortran-Programm, welches automatisiert werden soll. Dieses ist aber auf normale Nutzerinteraktion ausgelegt und das Raussuchen aller Stellen, wo Eingaben vom Nutzer verlangt wreden, ist ehr aufwendig. Daher kam die Idee, man könnte doch die Nutzereingabe simulieren, indem das Serverprogramm irgendwie die Tastatureingabe tunnelt und als Bediener fungiert. Daher meine Frage: geht das und wenn ja, wie? Laufen soll das ganze unter Suse 11.1
Also Ablauf wäre:
1. Serverprogramm startet Fortran-Programm
2. Serverprogramm simuliert Tastatur-input
3. Serverprogramm wartet auf Beendigung des Fortran-Programmes und nutzt die dabei enstandenenen Dateien weiterMfG Pellaeon
-
Ist es ein Kommandozeilenprogramm? Wenn ja, einfach einen String in stdin pipen.
-
Hiho,
danke für den Tipp. Nach ein bisschen rumsuchen und probieren habe ich nun folgenden Testcode:
#include <iostream> #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> using namespace std; int main() { cout << "Hallo du dummes Eclipse" << endl; int myPipe[2]; pipe(myPipe); pid_t child = fork(); if (child < 0) { cout << "Fehler beim Prozess-Klonen"; return -1; } if (child == 0) { dup2(myPipe[0],0); close(myPipe[1]); cout << "Kind" << endl; execl("/home/Pellaeon/workspace/Piper/Debug/Piper",0); } //exit(child); dup2(myPipe[1],1); close(myPipe[0]); sleep(2); cout << "Test" << endl; int rv; wait(&rv); //waitpid(child,0,0); cout << "NACH dem Aufruf" << std::endl; sleep(3); return 0; }
Mein Problem: das "NACH dem Aufruf" erscheint nie in der Ausgabe. Ist da noch irgendetwas falsch?
Und ist es möglich, dass die Ausgabe, die der parent in das cout schickt, in die pipe zum stdin geht und extra noch auf dem Bildschirm auftaucht, sodass man sieht, was der Parent "tippt"?
-
Hm ok ,is ja klar, ich hab das ja umngelenkt, deswegen erscheitn das nicht auf dem Bildschirm, ein dup2(0,1) behebt das Problem. Zweite Frage vbesteht noch: wie kann ich sozusagen in beides schreiben: auf dem Bildschirm und in den stdin?
-
Pellaeon schrieb:
Hm ok ,is ja klar, ich hab das ja umngelenkt, deswegen erscheitn das nicht auf dem Bildschirm, ein dup2(0,1) behebt das Problem. Zweite Frage vbesteht noch: wie kann ich sozusagen in beides schreiben: auf dem Bildschirm und in den stdin?
Schreib einfach mit man: tee in eine Datei, und beobachte die mit
tail -f
.