Debian Bibliothek Write/WriteLn

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Debian Bibliothek Write/WriteLn

Beitrag von Achtzig »

Hallo beisammen,

am 1.1 wurde über die Paketverwaltung von Debian (Squeeze) die neue FPC- und Lazarus-Verson installiert. Seit dem habe ich ein kleines Problem mit Write/WriteLn.

Bei dem Programm handelt es sich um eine CGI-Anwendung und die Ausgabe der Daten erfolgt innerhalb einer Bibliothek. Wird diese geschlossen, werden die Ausgabedaten, die sich noch im Puffer (8KB?) befinden, verworfen, sodaß der ausgegebene HTML-Text nicht vollständig ist.

Meine Frage wäre also, wie kann ich vor dem Beenden der Bibliothek den Ausgabepuffer senden? Ein Flush(StdOut) hat leider nicht funktioniert. Bei einem normalen Programm gibt es dieses Problem nicht, sondern scheinbar nur bei einer Bibliothek.

carli
Beiträge: 657
Registriert: Sa 9. Jan 2010, 17:32
OS, Lazarus, FPC: Linux 2.6.x, SVN-Lazarus, FPC 2.4.0-2
CPU-Target: 64Bit

Re: Debian Bibliothek Write/WriteLn

Beitrag von carli »

Warum nutzt du WriteLn in einer Bibliothek? Das sollte/dürfte eigentlich gar nicht gehen, da es alleinige Aufgabe des Programms sein sollte. (sonst würde im Streamdump des ffmpeg-Decoders auf einmal Fehlermeldungen irgendwelcher Libs erscheinen).

Die saubere Lösung wäre eigentlich, dass die Bibliothek einen Verweis auf eine writeln-Funktion geliefert bekommt, die sie benutzen soll (am besten noch mit Kontext-Zeiger, der mit übergeben wird.)

marcov
Beiträge: 1102
Registriert: Di 5. Aug 2008, 09:37
OS, Lazarus, FPC: Windows ,Linux,FreeBSD,Dos (L trunk FPC trunk)
CPU-Target: 32/64,PPC(+64), ARM
Wohnort: Eindhoven (Niederlande)

Re: Debian Bibliothek Write/WriteLn

Beitrag von marcov »

Mache der flush in der Bibliothek. Heute haben mainprogram und .so beiden ein eigenes RTL.

Achtzig
Beiträge: 90
Registriert: Mo 15. Okt 2007, 13:09
OS, Lazarus, FPC: Debian
CPU-Target: xxBit

Re: Debian Bibliothek Write/WriteLn

Beitrag von Achtzig »

Danke erstmal für die Antworten.
Warum nutzt du WriteLn in einer Bibliothek? Das sollte/dürfte eigentlich gar nicht gehen, da es alleinige Aufgabe des Programms sein sollte.
Funktioniert aber schon seit Jahren sehr gut. Das Hauptprogramm hat nur die Aufgabe, die Bibliothek einzubinden und gibt sofort die gesamte Steuerung an diese ab. Das mit der sauberen Lösung werde ich ausprobieren, auch wenn ich die direkte Verwendung von WriteLn in der Bibliothek nicht dreckig finde.
Mache der flush in der Bibliothek. Heute haben mainprogram und .so beiden ein eigenes RTL.
Genau davon bin ich ausgegangen und Flush wird direkt nach der letzten Ausgabe innerhalb der Bibliothek aufgerufen. Aber irgendwie flusht da nix :(

Wenn ich im Anschluß noch 8000 Leerzeichen ausgebe, wird der gesamte HTML-Text geliefert. DAS nenne ich schmutzige Programmierung :wink: Habe ich allerdings auch nur lokal und zum Testen drin. War mir erst nicht sicher, ob es tatsächlich am Write(Ln)-Puffer lag.

Nachtrag: Ich habe es gefunden :D Der Satz von carli mit den Fehlermeldungen hat mich daran erinnert, daß diese ja nicht über den normalen Ausgabe geliefert werden. Mein Fehler war, daß ich die falsche Datei angegeben habe. Anstatt Flush(StdOut) muß Flush(Output) ausgeführt werden - dann ist das so, wie es immer war.

Antworten