This file is indexed.

/usr/share/doc/HOWTO/de-html/DE-SCSI-Programmierung-HOWTO-5.html is in doc-linux-de 2003.10-5.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="LinuxDoc-Tools 0.9.65">
 <TITLE>Das Linux SCSI Programmier HOWTO: &Uuml;berblick der Deviceprogrammierung</TITLE>
 <LINK HREF="DE-SCSI-Programmierung-HOWTO-6.html" REL=next>
 <LINK HREF="DE-SCSI-Programmierung-HOWTO-4.html" REL=previous>
 <LINK HREF="DE-SCSI-Programmierung-HOWTO.html#toc5" REL=contents>
</HEAD>
<BODY>
<A HREF="DE-SCSI-Programmierung-HOWTO-6.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO-4.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO.html#toc5"><IMG SRC="toc.png" ALT="Inhalt"></A>
<HR>
<H2><A NAME="s5">5.</A> <A HREF="DE-SCSI-Programmierung-HOWTO.html#toc5">&Uuml;berblick der Deviceprogrammierung</A></H2>

<P>Das Headerfile <CODE>include/scsi/sg.h</CODE> 
enth&auml;lt die Beschreibung des Interface (dies basiert auf Kernelversion 
1.3.98):</P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
struct sg_header
 {
  int pack_len;    /* L&auml;nge des eingehenden Pakets (mit Header) */
  int reply_len;   /* Maximall&auml;nge des erwarteten Antwortpakets */
  int pack_id;     /* Id Nummer des Pakets */
  int result;      /* Ergebnis 0 bedeutet ok, sonst einer der errno Codes */
  unsigned int twelve_byte:1;
               /* Erzwinge 12 byte Kommandol&auml;nge f&uuml;r Gruppe 6 &amp; 7 
Kommandos  */
  unsigned int other_flags:31;                  /* f&uuml;r Erweiterungen */
  unsigned char sense_buffer[16]; /* nur bei Antwortpaketen benutzt */
  /* Als n&auml;chstes folgen direkt der Block mit dem SCSI-Kommando und 
eventuell Daten zum Befehl */
 };
</PRE>
</CODE></BLOCKQUOTE>
</P>

<P>Diese Struktur legt fest, wie ein SCSI Kommando bearbeitet werden soll und nimmt
das Ergebnis nach erfolgter Abarbeitung auf. Die einzelnen
Komponenten werden sp&auml;ter in Kapitel 
<A HREF="DE-SCSI-Programmierung-HOWTO-7.html#sec-header">sec-header</A>
 erl&auml;utert.</P>
<P>Die allgemeine Prozedur zum Datenaustausch l&auml;uft wie folgt:
ein Kommando wird mit <CODE>write()</CODE> an ein ge&ouml;ffnetes Ger&auml;t geschickt. 
Der Block dazu enth&auml;lt diese drei Abschnitte:</P>


<P>
<BLOCKQUOTE><CODE>
<PRE>
struct sg_header
SCSI Kommando
zu schickende Daten zu diesem Kommando
</PRE>
</CODE></BLOCKQUOTE>
</P>

<P>Das Ergebnis eines Kommandos wird mit <CODE>read()</CODE> gelesen. Der Block hat
eine &auml;hnliche Struktur:</P>

<P>
<BLOCKQUOTE><CODE>
<PRE>
struct sg_header
gelieferte Daten vom SCSI-Ger&auml;t
</PRE>
</CODE></BLOCKQUOTE>
</P>

<P>Dies war der &Uuml;berblick der Prozedur. Die folgenden Kapitel beschreiben
die einzelnen Schritte detaillierter.</P>
<P>Hinweis: Bis hin zu aktuellen Kerneln ist es notwendig, das SIGINT signal
zwischen <CODE>write()</CODE> und entsprechendem <CODE>read()</CODE> Aufruf zu blockieren
(z.B. mittels <CODE>sigprocmask()</CODE>). Eine R&uuml;ckkehr nach der <CODE>write()</CODE>
H&auml;lfte ohne den <CODE>read()</CODE> Aufruf f&uuml;hrt zur Blockade bei 
nachfolgenden
Zugriffen. Diese Behandlung ist in den Beispielen nicht enthalten.
Es sollte daher beim Laufenlassen der Beispiele auf das
Signal SIGINT (Dr&uuml;cken von ^C) verzichtet werden.</P>

<HR>
<A HREF="DE-SCSI-Programmierung-HOWTO-6.html"><IMG SRC="next.png" ALT="Weiter"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO-4.html"><IMG SRC="prev.png" ALT="Zurück"></A>
<A HREF="DE-SCSI-Programmierung-HOWTO.html#toc5"><IMG SRC="toc.png" ALT="Inhalt"></A>
</BODY>
</HTML>