[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In AmigaOS 2.04 wurde ein neuer Handler eingef�hrt, der es erlaubt, Daten zwischen verschiedenen Programmen auszutauschen. Dieser Handler hei�t ‘L:Queue-Handler’, ist aber besser als ‘PIPE:’ bekannt.
‘PIPE:’ implementiert eine echte, Unix-artige Pipe
,
mit der man die Standardausgabe eines Programms als Standardeingabe
eines anderen Programms verwenden kann. Es ist auch m�glich, mehrere
Programme �ber mehrere Pipes gleichzeitig zu verketten.
Pipes brauchen weniger RAM f�r tempor�re Dateien, und der
Zugriff ist schneller.
Allerdings unterscheidet sich ‘PIPE:’ von Unix-Pipes in zwei wesentlichen Punkten:
Der Handlername von PIPE: ist vollst�ndig ‘PIPE:name/bufsize/bufnum’,
wobei ‘name’ den verwendeten Pipekanal identifiziert und eindeutig
sein sollte. Durch verschiedene Namen kann man also gleichzeitig mehrere
Pipe-Kan�le �ffnen. Die optionalen Argumente bufsize
und
bufnum
geben die Gr��e und Anzahl der verwendeten Datenpuffer
an. Meist schreibt man einfach ‘PIPE:name’, die Vorgabegr��e
ist dann 4096 Bytes und die Anzahl unbegrenzt.
1.1 Verwendung von PIPE: in einer AmigaShell | ||
1.2 Das Pipe-Kommando | ||
1.3 Das Pipe-Kommando in der AmigaShell | ||
1.4 Die _mchar-Variable | ||
1.5 Bekannte Probleme |
Osma Ahvenlampi (Osma.Ahvenlampi@hut.fi)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Zun�chst mu� ‘PIPE:’ nat�rlich mit Mount
angemeldet sein.
Dies kann durch das Kommando
1> Mount PIPE:
in der Shell geschehen, ab AmigaOS 2.1 auch dadurch, da� man die Datei ‘PIPE’ nach ‘DEVS:DosDrivers’ schiebt.
In einem AmigaShell-Fenster kann man dann folgende Kommandos eingeben:
1> Run List SYS: >PIPE:Listoutput 1> More <PIPE:Listoutput
Diese beiden Kommandos erzeugen also zun�chst eine Liste der Dateien in ‘SYS:’ und geben diese dann mit Hilfe des More-Kommandos aus. Man k�nnte auch folgendes probieren:
1> Run List SYS: NOHEAD >PIPE:Listoutput 1> Run Sort PIPE:Listoutput PIPE:Sortedoutput 1> More <PIPE:Sortedoutput
Dies w�rde also die Liste vor der Ausgabe noch sortieren.
Beachten Sie die Verwendung von Run
au�er f�r das jeweils
letzte Programm, durch die alle Programme gleichzeitig ablaufen.
Man kann auch die Programme gleichzeitig in verschiedenen Shells
ablaufen lassen.
Das Leeren der Pipe kann auch manuell geschehen, vorausgesetzt man kennt den Namen des verwendeten Kanals, indem man folgendes eingibt:
1> Type PIPE:name TO NIL:
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Im vorigen Beispiel ist die Verwendung von Pipes recht kompliziert, vor allem verglichen mit Unix-Pipes. Es gibt aber eine bessere M�glichkeit.
Andy Finkel, der fr�her bei Commodore gearbeitet hat, hat auch ein
Kommando Pipe
geschrieben (was man nicht mit ‘PIPE:’
verwechseln sollte!), das die Benutzung von Pipes stark vereinfacht.
Ungl�cklicherweise wurde dieses Programm letzten Endes dann doch nicht
in die offizielle Workbench aufgenommen, allerdings mit Billigung
von Commodore ver�ffentlicht (Quellen: Fish-Disk 673, Aminet,
‘util/cli/finkelshelltools.lha’). Dieses Programm arbeitet auch
unter OS3.1 noch problemlos.
Die Verwendung des Pipe-Kommandos ist einfach. Man �bergibt die auszuf�hrenden Programme als Argumente an Pipe, getrennt durch das Zeichen <|>, z.B.
1> Pipe List SYS: | More oder 1> Pipe List: SYS: NOHEAD | Sort IN: OUT: | More
Beachten Sie die Verwendung von ‘IN:’ und ‘OUT:’, die n�tig sind, weil das Sort-Kommando nicht von der Standardeingabe lesen und nicht auf die Standardausgabe schreiben kann. Diese Devices werden durch das Kommandos Pipe simuliert. Durch die Environment-Variable _pchar kann man auch ein anderes Zeichen anstelle von <|> verwenden.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Es gibt ein sehr n�tzliches, allerdings undokumentiertes Feature der AmigaShell: Diese kennt das Pipe-Kommando! Ist die lokale Variable _pchar gesetzt, dann kann man Pipes sogar ohne Eingabe des Pipe-Kommandos benutzen. Die Shell erkennt das durch _pchar vorgegebene Zeichen und ruft f�r Kommandozeilen, die es enthalten, automatisch Pipe auf.
Am besten wird das folgende Kommando in ‘s:Shell-Startup’ eingetragen:
1> Set _pchar "|"
(2) Man kann die vorigen Beispiele dann so ausf�hren:
1> List SYS: | More oder 1> List SYS: NOHEAD | Sort IN: OUT: | More
Dies entspricht also v�llig den Unix-Pipes.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Die lokale Variable _mchar legt das Zeichen fest, das als Kommandotrenner dient. Setzt man also
1> Set _mchar ";"
dann kann man in der Shell die Befehle hintereinanderf�gen, durch den Strichpunkt getrennt.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Ich bekomme die Fehlermeldung
PIPE: Unknown command
wenn ich das Kommando ‘List SYS: | More’ ausf�hre, obwohl
‘PIPE:’ mit Mount
angemeldet ist. Was ist falsch?
Die Shell sucht nach dem Kommando Pipe
in der Fehlermeldung,
nicht nach dem ‘PIPE:’-Device. Dieses Kommando ist also nicht
im Suchpfad (meist in ‘C:’) installiert.
Ein Requester meldet
Please insert volume PIPE: in any drive
wenn ich eines der Kommandos aus den Beispielen ausf�hren will.
‘PIPE:’ ist nicht angemeldet. Dies kann mit ‘Mount PIPE:’ geschehen.
Beim Verwenden von PIPE: gehen manchmal Zeichen verloren. Was ist los?
Alle queue-handler bis einschlie�lich OS 3.1 haben Fehler, die eine wirklich sichere Daten�bermittlung verhindern. Ein m�glicher kompatibler Ersatz ist auf dem Aminet: ‘util/sys/HWGQueue.lha’.
Wenn ich eines der Beispiele ausf�hre, dann er�ffnet das
More
-Kommando ein Fenster, aber dort erscheint nichts/
eine Fehlermeldung erscheint/ein Filerequester erscheint.
Sie verwenden ein anderes More-Kommando als das aus der Workbench. Verwenden Sie einen anderen Namen oder installieren Sie ein More, das Pipes unterst�tzt, z.B. das More von Commodore, Less oder Most.
[Top] | [Contents] | [Index] | [ ? ] |
Dabei ‘1>’ der Prompt der AmigaShell, die eine Eingabe erwartet. Die Nummer kann nat�rlich variieren.
Die Anf�hrungsstriche sind wesentlich! Wenn _pchar bereits gesetzt ist, wird sonst angenommen, es handele sich bereits um einen Aufruf von Pipe. Dies kann etwa dann geschehen, wenn aus einer Shell eine neue gestartet wird.
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated on February 11, 2022 using texi2html 5.0.
The buttons in the navigation panels have the following meaning:
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ < ] | Back | Previous section in reading order | 1.2.2 |
[ Up ] | Up | Up section | 1.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ >> ] | FastForward | Next chapter | 2 |
[Top] | Top | Cover (top) of document | |
[Contents] | Contents | Table of contents | |
[Index] | Index | Index | |
[ ? ] | About | About (help) |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
This document was generated on February 11, 2022 using texi2html 5.0.