Nachdem ich meinen Chatbot auch mal im Chat testen wollte, und eines der Module aufgrund einer Race-Condition nicht funktioniert, und die dort Anwesenden auch nicht so recht weiter wußten (es waren zu dem Zeitpunkt ausschließlich Gnome-Entwickler dort, hehe), da dachte ich mir, muß ich das Ding mal hier posten. Ich denke mal, da es solche Sachen unter Linux/Unix öfter mal zu machen gibt, sollte da ein Standard-Weg sein. Immerhin hat ein "grubby rmmod exec" die Sache kurzfristig behoben :-) (Grubby heißt der Bot)
Ich will einen Kindprozess starten, was auf seine stdin schreiben, und was von seiner stdout lesen. Also kein popen(), sondern bidirektional. Dummerweise bekomme ich meistenst -1 gelesene Bytes zurück, nur selten kommt die erwünschte Antwort. Dabei spielt es keine Rolle, ob der Kindprozess lange braucht (z.B. wenn er in einem Wörterbuch unter /usr/share/trans nachschaut) oder nur kurz, weil er sagt daß er eine Sprache nicht unterstützt (Japanisch oder so).
Der Quelltext ist auf: http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/ggz/utils/guru/modules/exec.c... Funktion simpleexec().
Das Problem ist, sowohl read als auch waitpid müssen non-blocking sein, und ein Timeout muß es auch noch geben. Und das geht doch sicher irgendwie besser.
Josef Spillner
P.S. Wen es interessiert: Dort wurde das Geheimnis über die neue Elysium-Distribution gelüftet. Siehe http://dobey.free.fr/elysium. Leider ließ sich der Entwickler nicht überreden, KDE einzubauen.
P.P.S. Sebastian, die i18n-Dokumentation mache ich jetzt am Wochenende, da hat sich nämlich noch einiges geändert mit der dynamischen Sprachauswahl.