setinfo(4) setinfo(4)
NAME
setinfo - Gerätebeschreibungssprache
SYNTAX
/etc/default/diskinfo/setinfo/*
/etc/default/tapeinfo/setinfo/*
/etc/default/raidinfo/setinfo/*
/etc/default/floppyinfo/setinfo/*
/etc/default/jukeboxinfo/setinfo/*
#include <sys/setinfo.h>
ioctl(fd, IOCSETINFO, si);
struct setinfo *si;
ioctl(fd, IOCGETINFO, si);
struct setinfo *si;
BESCHREIBUNG
Bei den Dateien
/etc/default/diskinfo/setinfo/*
und
/etc/default/tapeinfo/setinfo/*
handelt es sich um eine Datenbasis mit Gerätebeschreibungen für
/sbin/setinfo. In diesen Dateien werden zur Beschreibung der Geräte
die verschiedenen Datenstrukturen, die durch einen Gerätetreiber im
Systemkern benutzt werden, über eine einfache Zuweisung im Format
identifier=value angegeben. Diese Informationen werden durch das Kom-
mando /sbin/setinfo analysiert und mit dem ioctl-Funktionsaufruf IOC-
SETINFO an den Gerätetreiber im Systemkern übergeben. Mit Hilfe des
ioctl-Funktionsaufrufs IOCGETINFO können die Informationen auch beim
Gerätetreiber abgefragt werden.
Die erkannten Kennungen sind gerätespezifisch und werden anhand einer
Reihe von Tabellen im Gerätetreiber ermittelt.
Das Kommando /sbin/setinfo übersetzt die Gerätebeschreibungssprache in
eine selbsterklärende Datenstruktur. struct setinfo wird in
/usr/include/sys/setinfo.h beschrieben.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
setinfo(4) setinfo(4)
BEISPIELE
Eine Gerätebeschreibungsdatei für eine Seagate-Platte vom Typ 43400N
3.4 GB sieht folgendermaßen aus:
#
# setinfo-Konfigurationsdatei für MP88 (Seagate 43400N 3.4 GB)
#
dpflags=1
dpfastmo=20
dpslotmo=4200
dpaskey=12
dpeaskey=0
dpembytes=0
dpemstart=18
dporder=38
dpiname='SEAGATE ST43400N '
dpconfindx=1
dpmaxbusy=4
flag=0
dmspbytes=36
dmsp={0x0,0x0,0x0,0x8,0x0,0x0,0x0,0x0,0x0,0x0,0x2,0x0,0x1,0xa,\
0xc4, 0x1b,0x0c,0x0,0x0,0x0,0x1,0x0,0xff,0xff,0x8,0xa,0x0,0x0,0x0,0x0,0x0,\
0x0,0x1, 0x80,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,\
0x0, 0x0,0x0, 0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}
dktcylinders=2735
dktreserved=4
dktusercyl=2733
dktheads=21
dktsectors=99
dktbsize=512
dktgap1=0
dktgap2=0
dktrpm=5400
dktformat=0x90000
dktname='MP88'
dktclass='disk'
dktwidth=1
Im nachfolgenden Programmausschnitt werden eine setinfo-Struktur ein-
gerichtet und die Daten aus dem Systemkern abgefragt:
#include <sys/stdio.h>
#include <sys/stddef.h>
#include <sys/setinfo.h>
/*
* Anlegen einer neuen setinfo bzw. Vergrößern einer bereits
* vorhandenen setinfo, um ihren Inhalt anzupassen
*/
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
setinfo(4) setinfo(4)
struct setinfo *
allocinfo(struct setinfo *si)
{
if (si)
{
si = (struct setinfo *)realloc(si,
sizeof(struct setinfo) +
si->sicnt * sizeof(struct setpair));
/*
* Wenn bereits Zuweisungs-Paare eingerichtet wurden,
* beginnen sie unmittelbar nach der setinfo.
*/
si->sip = (struct setpair *)(si + 1);
}
else
{
si = (struct setinfo *)malloc(sizeof(struct setinfo));
si->sip = NULL;
si->sicnt = 0;
}
if (si == NULL)
{
fprintf(stderr, "Couldn't allocate setinfo structure");
exit(1);
}
return(si);
}
/*
* Lesen der aktuellen Informationen für eine Platte.
*/
readinfo(int fd, struct setinfo **info)
{
int error = 0;
*info = allocinfo(NULL);
if (ioctl(fd, IOCGETINFO, *info))
{
fprintf(stderr, "couldn't read info header");
error = 1;
}
else
{
*info = allocinfo(*info);
memset((*info)->sip, 0,
(*info)->sicnt * sizeof(struct setpair));
if (ioctl(fd, IOCGETINFO, *info))
{
fprintf(stderr, "couldn't read info");
error = 1;
}
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
setinfo(4) setinfo(4)
}
return(error);
}
DATEIEN
/etc/default/diskinfo/setinfo/*
/etc/default/tapeinfo/setinfo/*
/etc/default/raidinfo/setinfo/*
/etc/default/floppyinfo/setinfo/*
/etc/default/jukeboxinfo/setinfo/*
SIEHE AUCH
setinfo(8).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98