Hauptindex | Abschnitt 4 | 日本語 | Optionen |
#include <sys/mtio.h>int ioctl(int fd, int request [, (void *)arg3]) int ioctl(int fd, MTIOCTOP, (struct mtop *)mt_cmd) int ioctl(int fd, MTIOCGET, (struct mtget *)mt_status) int ioctl(int fd, MTIOCPOS, (struct mtpos *)mt_pos)
Zusätzlich werden generell zwei minor device Nummern benutzt. Eine grundsätzliche minor device Nummer, n, die sequentiell beim Erkennen der Laufwerke vergeben wird, und eine “nicht zurückspulen” Device Nummer, (n+ 128). Wenn eine Bandeinheit über die grundsätzliche Device Nummer, n, geöffnet wird, so wird nach dem Schließen ein REWIND Kommando an die Bandeinheit geschickt; Bei der Benutzung der Bandeinheit über die “nicht zurückspulen” Device Nummer, (n+ 128). halt nicht ;-)
Optionen wie die Schreibdichte oder Blockgröße sind nicht in die minor device Nummern implementiert. Diese Optionen müssen durch die Verwendung von ioctl() Aufrufen gesetzt werden Sie werden erst nach Schließen und einem darauffolgenden “Wieder-Öffnen” der “Device-Datei” aktiv.
Devices werden üblicherweise mit dem Programm mknod eingetragen
mknod -m 660 /dev/st0 c 9 0 mknod -m 660 /dev/st1 c 9 1 mknod -m 660 /dev/nst0 c 9 128 mknod -m 660 /dev/nst1 c 9 129
Es gibt hier kein vergleichbares BLOCK Device. Das Character (zeichenorientierte) Device bietet standartmäßig das Zwischenspeichern von Zeichen (buffering) und das “ weiterlesen” (read-ahead) Merkmal an. Ferner unterstützt es zufälliges Lesen und Schreiben, welches nur durch den internen Treiber Buffer begrenzt ist. (Standard: 32768 bytes)
Die Buffergröße kann sowohl als Kernelparameter, sowie auch im Quelltext “fest” vergeben werden.
Üblicherweise wird ein Soft-Link /dev/tape eingerichtet, der auf das im System vorhandene und zu benutzende Device zeigt.
Diese Operation benötigt ein Argument vom Typ
(struct mtop *).
Nicht alle Laufwerke unterstützen jede der möglichen Anweisungen. Der Treiber gibt ein EIO zurück, wenn das Laufwerk die Anweisung nicht unterstützt.
Anm. des Übersetzers
Das Folgende ist nur sehr schwer 100%ig ins Deutsche zu übersetzen, da so mancher Begriff aus dem Englischen geläufiger ist, als seine deutsche Übersetzung. Da ich nicht in der “IBM Übersetzerabteilung” arbeite, habe ich hier und dort das englische Original stehen lassen. (Hauptsächlich bei sehr kurzen Beschreibungen)
Bei “Unverstehbarkeit” des folgenden bitte ich auf die Original (englischsprachige) man-page zu st.4 zurückzugreifen. Speziell für diesen Abschnitt würde der Übersetzter sich über Rückmeldungen der “praktischen Anwender” freuen. ;-)
Für eine gesunde Kritik einfach eine Mail an c.schmidt@ius.gun.de
/* Struktur für MTIOCTOP - Anweisungen an das Bandlaufwerk */struct mtop { short mt_op; /* Welche Anweisung (Auflistung folgt) */ int mt_count; /* Wie oft diese Anweisung ausführen */ };
Bandlaufwerk; mögliche Anweisungen:
MTBSF | Zurückspulen über mt_count Filemarks. | ||
MTBSFM | Zurückspulen über mt_count Filemarks. Positionieren des Mediums(Schreibkopf?) auf die EOT Seite des letzten Filemarks. | ||
MTBSR | Zurückspulen über mt_count records (tape blocks) BLOCKS. | ||
MTBSS | Zurückspulen über mt_count setmarks. | ||
MTEOM | “Geh an das Ende der aufgezeichenten Daten...” Zum Anhängen von Dateien/Archiven. | ||
MTERASE | Band löschen. | ||
MTFSF | Vorspulen über mt_count Filemarks. | ||
MTFSFM | Vorspulen über mt_count Filemarks. Positionieren des Mediums(Schreibkopfes?) auf die BOT Seite des letzen Filemarks. | ||
MTFSR | Vorspulen über mt_count records (tape blocks) BLOCKS. | ||
MTFSS | Vorspulen über mt_count Setmarks. | ||
MTNOP | Nichts machen - Als Seiteneffekt wird der Treiberbuffer gelöscht. Kann möglicherweise in Verbindung mit MTIOCGET benutzt werden. | ||
MTOFFL | Zurückspulen und Bandlaufwerk stoppen. | ||
MTRESET | Reset drive. | ||
MTRETEN | Retension tape. (Medium nicht auswerfen?) | ||
MTREW | Zurückspulen. | ||
MTSEEK | Suche nach dem BLOCK mit der Nummer mt_count. Diese Anweisung erfordert ein SCSI-2 Bandlaufwerk, welches das LOCATE Kommando unterstützt (Laufwerkspezifische Addresse), oder ein Tandberg-kompatibles SCSI-1 Laufwerk. (Tandberg, Archive, Viper, Wangtek, ... ). Die BLOCK NUMMER ist dabei Laufwerk spezifisch und kann möglicherweise über den Rückgabewert von MTIOCPOS herausgefunden werden. | ||
MTSETBLK | Setzen der BLOCK Grö0e auf den Wert, der in mt_count angegeben ist. Ein BLOCK Größe von 0 setzt das Laufwerk auf variable BLOCK Größe. | ||
MTSETDENSITY |
Setzen der Schreibdichte (tape density) auf den Wert in
mt_count. Übliche Werte für die Schreibdichte sind
:
| ||
MTWEOF | Schreibe mt_count Filemarks. | ||
MTWSM | Schreibe mt_count Setmarks. | ||
MTSETDRVBUFFER | Set various drive and driver options according to bits encoded in mt_count. | ||||||||
Setzen der Laufwerk und Treiber Optionen. | |||||||||
Diese bestehen aus dem Setzen des Laufwerk “buffer” Modi, 6 Treiber Optionen vom Typ Boolean und dem “Schreibschwellwert des Treiberbuffers.” (buffer write threshold); d.h. ab dem Erreichen des Schreibschwellwertes wird das Band physikalisch beschrieben. Diese Parameter können nur vor vor dem ersten Schreiben auf Laufwerkes benutzt werden, und bleiben auch beim Schliessen und Öffenen des Devices bestehen. Eine einzelne Anweisung kann dabei (a) nur den “buffer” Modi, und/oder (b) die Schalter von TYP Boolean, und/oder (c) den Schreibschwellwert des Treiberbuffers betreffen. | |||||||||
Ein Wert von 0 in den “high-order 4 Bits” muss zum Setzen des
Laufwerk “buffer” Modi benutzt werden.
Folgende Modi sind möglich:
| |||||||||
Der Schwellwert für das Schreiben wird über mt_count kontrolliert. | |||||||||
MT_ST_WRITE_THRESHOLD
Logisch -ODER- Verknüpft mit einem BLOCK Zähler in den unteren 28 Bits. (logically ORed with a block count in the low 28 bits.) Der BLOCK Zähler wird mit 1024-Byte großen BLÖCKEN bewertet, nicht mit der wirklichen physikalischen Größe auf dem Medium. Die Schwellwertgröße darf, wie vorher beschrieben, die interne Treiberbuffergröße nicht überschreiten.
Setzen der Booleanaqschen Operatoren: | |||||||||||||||||||
falsefalscher Aussagewert, truewahrer Aussagewert | |||||||||||||||||||
mt_count kann dabei folgende Werte annehmen. | |||||||||||||||||||
Die KONSTANTE MT_ST_BOOLEANS logisch ODER verknüpft mit einer der folgenden Kombinationen. Jede nicht benutzte Option wird “false” gesetzt. | |||||||||||||||||||
| |||||||||||||||||||
Diese Abfrage benötigt ein Argument von Typ (struct mtget *). Der Treiber gibt eine EIO Fehlermeldung zurück, wenn das Laufwerk die Operation nicht ausführt.
/* Aufbau von MTIOCGET - “Besorge dir den Bandlaufwerk Status” Anweisung struct mtget { long mt_type; long mt_resid; /* Die folgenden Register sind Laufwerksabhängig */ long mt_dsreg; long mt_gstat; long mt_erreg; /* Die folgenden zwei Felder werden nicht immer benutzt */ daddr_t mt_fileno; daddr_t mt_blkno; };
mt_type 11 | |||
Es gibt viele “Header” Definitionen für mt_type, aber der aktuelle Treiber unterstützt generell nur die Typen MT_ISSCSI1 (Generic SCSI-1 tape) und MT_ISSCSI2 (Generic SCSI-2 tape). | |||
mt_resid | |||
ist immer Null. (Nicht implementiert für SCSI Bandlaufwerke.) | |||
mt_dsreg | |||
Gibt die aktuellen Laufwerk Einstellungen für die BLOCK Grösse (in den unteren 24 Bits) und der Schreibdichte (in den hohen 8 Bits) aus. Diese Felder sind durch MT_ST-BLKSIZE_SHIFT, MT_ST_BLKSIZE_MASK, MT_ST_DENSITY_SHIFT, und MT_ST_DENSITY_MASK definiert. | |||
mt_gstat | |||
Gibt generelle ( Laufwerksunabhängige) Status Informationen zurück.
Das “Header File” definiert die Makros zum Testen dieser
Status Bits.
| |||
mt_erreg | |||
Das einzigste definierte Feld in mt_erreg ist der “ Fehlerzähler” (Es werden nur behobene Fehler gezählt) in den unteren 16 Bits (wie durch MT_ST_SOFTERR_SHIFT and MT_ST_SOFTERR_MASK definiert). Da dieser Zähler keinem Standard unterliegt (also von Laufwerk zu Laufwerk unterschiedlich sein kann), wird er nicht oft benutzt. | |||
mt_fileno | |||
Ausgabe der aktuellen Datei/Archiv Nummer (zero-based). Dieser Wert wird auf -1 gesetzt, wenn er nicht bekannt ist. (Z.B. nach einer MTBSS oder MTSEEK Anweisung). | |||
mt_blkno | |||
Ausgabe der BLOCK Nummer der/des aktuellen Datei/Archiv (zero-based). Dieser Wert wird auf -1 gesetzt, wenn er nicht bekannt ist. (Z.B. nach einer MTBSF, MTBSS oder MTSEEK Anweisung). | |||
Diese Anfrage benutzt ein Argument vom Typ
(struct mtpos *) und gibt die aktuelle Band-Block Nummer aus. Diese ist Laufwerksabhängig
und nicht die gleiche wie
mt_blkno welche durch Verwendung von
MTIOCGET.
zurückgegeben wird.
Das Laufwerk muß ein SCSI-2 Laufwerk sein, welches die READ POSITION
Anweisung unterstützt (Laufwerksabhängige Adresse), oder ein
Tandberg-kompatibles SCSI-1 Laufwerk (Tandberg, Archive, Viper, Wangtek, ... ).
/* structure for MTIOCPOS - mag tape get position command */
struct mtpos {
long mt_blkno; /* aktielle Block Nummer */
};
EIO | Die Anweisung wurde nicht zuende geführt. |
ENOSPC | Eine Schreiboperation konnte nicht beendet werden, da das Ende des Mediums (EOT) erreicht wurde. |
EACCES | Es wurde Versucht ein schreibgeschütztes Medium zu beschreiben. (Dieser Fehler wird noch nicht bei einem open().) erkannt!) |
ENXIO | Beim Öffen wurde festgestellt, das das Laufwerk nicht vorhanden ist. |
EBUSY | Das Laufwerk wird schon benutzt, oder der Treiber konnte keine Daten “Puffern”. (or the driver was unable to allocate a buffer) |
EOVERFLOW | Es wurde versucht einen Block mit einer variablen Länge zu lesen, der größer als der interne Treiber “Puffer” war. |
EINVAL | Einem ioctl() Aufruf wurde ein unzulässiges Argument übergeben, oder die angeforderte Block Größe ist unzulässig. |
ENOSYS | Unbekannter ioctl(). Aufruf |
Dieses Manual darf sowohl in der Original, als auch in der deutschen Version mit folgender Einschränkung benutzt, Vervielfältigt und Vertrieben werden. Dieser Copyright Abschnitt und der “Header” muß unverändert in allen Kopien beibehalten werden. Ferner sind die zusätzlichen Vereinbarungen im “Header” dieses Manuals zu beachten.
Januar 1996 | ST (4) | Linux |
Hauptindex | Abschnitt 4 | 日本語 | Optionen |
Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.
“ | This philosophy, in the hands of amateurs, leads to inexplicably mind-numbing botches like the existence of two programs, “head” and “tail,” which print the first part or the last part of a file, depending. Even though their operations are duals of one another, “head” and “tail” are different programs, written by different authors, and take different options! | ” |
— The Unix Haters' handbook |