Das Zeilenende-Problem bei Avanti
Anando Eger
a.eger at aneg-dv.de
Fr Sep 26 15:42:16 CEST 2003
On 26 Sep 2003 at 14:44, Martin Butkus wrote:
> Liebe Frau Koczian, liebe Liste,
>
> ich habe die Problematik des "\r\r\n"-Zeilenendes inzwischen analysiert,
> und hätte gerne Rückmeldungen zu der Lösung, die ich implementieren möchte.
Ein Schritt in Richtung geordneter Verhältnisse, den man nur beführworten
kann.
Auch falls ich an einigen Stellen in Scripten ändern muss - die Vorteile
überwiegen.
Viele Grüße
Anando Eger
>
> 1. Das Zeilenende wurde bislang in den alten Versionen von Avanti-W
> und Avanti-X unterschiedlich gehandhabt. Avanti-X verwendete "\n",
> Avanti-W "\r\n". [ In den Parameterdateien wurde dagegen der
> "ze"-Parameter ausgewertet und unverändert übernommen. ]
>
> Das allein ist schon unschön, weil ein Client ja nicht wissen kann,
> ob er mit einem Unix- oder einem Windows-Avanti-Server spricht.
>
> 2. Avanti-CL gibt seine Daten über den Standardausgabekanal aus,
> der normalerweise im sog. Text-Modus geöffnet ist. Damit wird
> automatisch eine Übersetzung \n -> \r\n vorgenommen, und zwar
> für *jede* Ausgabe. Entsprechend wird \r\n nach \r\r\n übersetzt,
> auf diese Weise kommt das von Frau Koczian geschilderte Problem
> zustande.
>
> Eine ähnliche Problematik betrifft übrigens die Standardeingabe und
> den Standardfehlerkanal.
>
> [ Die Binär- vs. Textmodus-Problematik ist übrigens uralt, und
> verursacht regelmäßig Bauchschmerzen bei allen, die damit zu tun
> haben. Das liegt in der Natur der Sache: die Einführung des
> Textmodus war ein Hack, der notwendig wurde, als sich Microsoft
> dazu entschieden hatte, in DOS "\r\n" als Zeilenende zu verwenden,
> statt "\n", wie damals (und unter Unix noch heute) üblich. ]
>
> Sinnvoll wäre es m.E. in jedem Fall, wenn sich Unix- und Windows-Variante
> des Servers identisch verhalten würden.
>
> Lösungsvorschlag:
>
> - avanti-cl betreibt alle seine Ein- und Ausgabekanäle nicht im Text-,
> sondern im Binärmodus, wo es keinerlei Übersetzung gibt. (Dies ist
> auch die einzige unter Unix verfügbare Betriebsart).
>
> Das hätte zur Konsequenz, daß für die "internen" Ausgaben, also
> z.B. das Ergebnis eines "list"-Befehls, unter Windows
> nicht mehr "\r\n" sondern "\n" als Zeilenende-Marker verwendet wird.
>
> Die Zeilenende-Markierung in den Parameterdateien richtet sich nach
> dem "ze"-Parameter, und wird dann unverfälscht übernommen.
>
> - Um mit den "anderen Zeilenenden" konsistent zu bleiben, wäre die
> Einstellung "ze = 10" sinnvoll (sowohl unter Unix als auch unter Windows).
>
> - Als "einheitlicher Zeilenendemarker" würde also "\n" gelten.
>
> Vorteil:
>
> - identisches und konsistentes Verhalten des Servers unter Unix und Windows
>
> Nachteil:
>
> - Skripte und Programme, die zwingend ein Zeilenende der Form "\r\n"
> erwarten, müssen angepaßt werden.
>
> Solche Programme wären aber sowieso nicht portabel, denn sie würden
> schon mit der bisherigen Unix-Version (avanti-x) nicht funktionieren.
>
> Die Webfrontends acphp und acwww sowie das z39.50-Modul müßten
> jedenfalls nicht angepaßt werden, eventuell aber manche
> selbstentwickelten Skripte.
>
> Ich bitte um Meinungen.
>
> Freundliche Grüße,
> Martin Butkus
Mehr Informationen über die Mailingliste Allegro