uiomove-Kernel-Service

Zweck

Verschiebt einen Datenblock zwischen dem Kernelbereich und einem durch eine uio-Struktur definierten Bereich.

Syntax

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/uio.h>
int uiomove ( cp,  n,  rw,  uiop)
caddr_t cp;
int n;
uio_rw rw;
struct uio *uiop;

Parameter

Element Beschreibung
CP Gibt die Adresse im Kernelspeicher an, zu oder von der Daten versetzt werden.
n Gibt die Anzahl der zu verschiebenden Byte an
rw Gibt die Richtung der Bewegung an:
UIO_READ
Kopiert Daten aus dem Kernelbereich in den durch die uio-Struktur beschriebenen Bereich.
UIO_SCHREIBEN
Kopiert Daten aus dem durch die uio-Struktur beschriebenen Raum in den Kernelraum.
Uiop Zeigt auf eine uio-Struktur, die den bei der Datenübertragung verwendeten Puffer beschreibt.

Beschreibung

Der Kernel-Dienst " uiomove verschiebt die angegebene Anzahl von Datenbytes zwischen dem Kernelbereich und einem durch " uio Struktur beschriebenen Bereich. Die oberen Hälften von Gerätetreibern, insbesondere von Zeichentreibern, verwenden häufig den uiomove-Dienst, um Daten in oder aus einem Benutzerbereich zu übertragen. Der ' uio_resid und uio_iovcnt in der uio-Struktur, die den Datenbereich beschreibt, muss größer als 0 sein, sonst wird ein Fehler zurückgegeben.

Der Dienst uiomove verschiebt die durch den Parameter n oder uio_resid angegebene Anzahl von Bytes, je nachdem, welcher Wert kleiner ist. Wenn entweder der Parameter n oder uio_resid gleich 0 ist, werden keine Daten verschoben. Der ' uio_segflg das Feld in der uio-Struktur wird verwendet, um anzuzeigen, ob die Bewegung auf einen Benutzer- oder Kernel-Datenbereich zugreift, oder ob der Aufrufer speicherübergreifende Operationen benötigt und die erforderlichen speicherübergreifenden Deskriptoren bereitgestellt hat. Wenn eine speicherübergreifende Operation angezeigt wird, muss ein speicherübergreifender Deskriptor im uio_xmem-Array für jedeiovecelement.

Wenn die Verschiebung erfolgreich ist, werden die folgenden Felder in der uio-Struktur aktualisiert:

Feld Beschreibung
uio_iov Legt die Adresse der aktuelleniovecelement zu verwenden.
uio_xmem Gibt die Adresse des aktuellenxmemelement zu verwenden.
uio_iovcnt Legt die Anzahl der verbleibendeniovecelemente.
uio_iovdcnt Gibt die Anzahl der bereits verarbeiteteniovecelemente.
uio_offset Gibt den Zeichenoffset auf der Einheit an, die die Ein-/Ausgabe ausführt.
uio_resid Gibt die Gesamtzahl der verbleibenden Zeichen in dem durch die uio-Struktur beschriebenen Datenbereich an.
iov_base Gibt die Adresse des Datenbereichs an, der durch den aktuelleniovecelement.
iov_len Gibt die Länge des verbleibenden Datenbereichs im Puffer an, der durch den aktuelleniovecelement.

Ausführungsumgebung

Der Kernel-Dienst uiomove kann nur aus der Prozessumgebung aufgerufen werden.

Rückgabewerte

Element Beschreibung
0 Erfolgreiche Ausführung.
ENOMEM Gibt an, dass kein Platz im Puffer vorhanden war.
EIO Zeigt einen permanenten E/A-Fehlerdateibereich an.
ENOSPC Gibt an, dass nicht genügend Plattenspeicherplatz verfügbar ist.
EFAULT Gibt einen ungültigen Benutzerstandort an.