Entwickler-Ecke
Sonstiges (FPC / Lazarus) / Linux API - Ausgabe eines Programmes überwachen...
gonzo_16 - Fr 14.01.05 09:29
Titel: Ausgabe eines Programmes überwachen...
Hallo...
Ich Kann ja mit Libc.System('blabla') tolle Sachen starten. Aber: Wie kann ich kontinuierlich die Ausgabe des Programmes abfragen?
Moderiert von AXMD: Tippfehler im Titel korrigiert.
patrick - Fr 14.01.05 09:33
was verstehst du unter "ausgabe" :?:
datei, meldungen....
gonzo_16 - Fr 14.01.05 19:43
Mit Ausgabe, meine ich z.B. wenn ich seti@home starte, dsa ich die Ausgabe des Clients in einem Memofeld darstellen kann. Oder bei ls, das ich alle dateinen die es listet in einem memofeld sehe. Oder eine Manpage in einem Memofels sehe...
WEnn es dir weiterhilft...das was man unter C mit einer pipe realisieren kann.
thx GonZo
tommie-lie - Fr 14.01.05 20:08
gonzo_16 hat folgendes geschrieben: |
das was man unter C mit einer pipe realisieren kann. |
Das müsste man in Pascal auch mit einer Pipe realisieren können. Frag' mich nicht wie's unter Linux geht, aber du scheinst es ja zu wissen ;-)
Ansonsten weiß ich, daß man (zumindest über die Kommandozeile, mit System() habe ich es noch nicht ausprobiert) die Ausgabe des Programmes in eine Datei umleiten kann. Die könntest du in deinem Programm alle x Sekunden neu auslesen. Das wäre allerdings die unschöne Lösung, die zudem noch eine anschließende Löschung der temporären Datei erfordert, die Lösung mit einer Pipe ist also schon die bessere.
gonzo_16 - Sa 15.01.05 02:57
Ja nur habe ich mit der pipe (bei C) das Problem, das wenn ich ein Prgramm wie SETI starte, die Pipe übereinen seperaten Thread auslesen müsste, da sie für lange zeit nicht leer wird. Nur ist threadprogrammierung sehr kompliziert...das mit der DAtei wäre ne idee...zwar unschön aber effizient
tommie-lie - Sa 15.01.05 10:19
gonzo_16 hat folgendes geschrieben: |
Nur ist threadprogrammierung sehr kompliziert... |
TThread gibt's AFAIR auch von der Kylix-RTL.
Ansonsten weiß ich nur, daß Thread-Programmierung unter Windows ohne die VCL noch das einfachste ist, was ich je mit der API gemacht habe, ich weiß aber natürlich nicht, wie es unter Linux damit aussieht, kann mir aber nicht vorstellen, daß es großartig anders sein kann.
gonzo_16 - So 16.01.05 19:04
jo..bei kylix habe iuch keine ahnng wie das geht...bei C isses jedenfalls nicht so einfach...
opfer.der.genauigkeit - Do 20.01.05 10:44
Also mir ist nur teilweise klar, was du machen möchtest.
Bzw. für die Formulierung gibt es unter Linux sicherlich tausend Lösungen.
Der Client, von dem du die Nachrichten lesen willst schickt die Nachrichten wohin?
Von wo willst du sie lesen? Vom Standart - Output? Denn | bzw. >> in C macht nix anderes als in den std- output schreiben, solange der Prameter nicht geändert wurde.
D.h. dein Client, wenn er Nachrichten schickt, muß ein Ausgabeziel haben.
Entweder eine Datei oder eine Console wte.
In beiden Fällen kannst du die Ausgabe wie eine Datei einlesen.
Nen Thread müßtest du auch nicht schreiben, wenn du da nicht so die Erfahrung hast. N Timer reicht doch :shock: .. oder etwa nicht :?:
gonzo_16 - Mo 07.02.05 17:06
um es dir einfacher zu mache und lange umschreibunge zu sparen (bin noch neu be Kylix, und kann meine Probleme schlecht beschreiben)
Ich möchte diesen C-Code in Kylix umsetzen:
Jetzt mal ganz einfach dargestellt:
Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| #include <stdio.h>
int main() { char buffer[2048]; FILE* pipe = popen("/bin/sh -c ls", "r"); while (!feof(pipe)) { fgets(bufer, 2048, pipe); printf("%s", buffer); } } |
gonzo_16 - Do 10.02.05 00:38
genau das habe ich gebraucht...nun weiss ich wie das mit der Pipe funktioniert...
Nur Leider hat das mit den Uses die er benutzt hat in meinem Kylix nicht hin...er SAgt er wisse nicht was TPipe ist...hm
schon mal Vielen Dank
gonzo_16 - Do 10.02.05 01:15
hqab von nem Freund gesagtr bekommen wie es geht: hier ein Beispiel um ls auszuführen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| var pioF: PIOFile; l: Integer; cmd: pChar; begin GetMem(cmd,10000) ; pioF:=LibC.pOpen('ls','r'); Libc.fread(cmd,1,10000,pioF); LibC.pclose(pioF); memo1.Lines.Add(cmd); FreeMem(cmd,10000); |
Moderiert von raziel: Code- durch Delphi-Tags ersetzt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2024 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!