ureadc-Kernel-Service

Zweck

Schreibt ein Zeichen in einen Puffer, der von einem UIO -Strukturbeschrieben wird.

Syntax

#include <sys/types.h>
#include <sys/errno.h>
#include <sys/uio.h>
int ureadc ( c,  uiop)
int c;
struct uio *uiop;

Parameter

Element Beschreibung
c Gibt ein Zeichen an, das in den Puffer geschrieben werden soll
Uiop Verweist auf eine UIO -Struktur, die den Puffer beschreibt, in dem ein Zeichen platziert werden soll

Beschreibung

Der Ureadc -Kernel-Service schreibt ein Zeichen in einen Puffer, der von einem UIO -Strukturbeschrieben wird. Einheitentreiberroutinen für die obere Hälfte, insbesondere Zeicheneinheitentreiber, verwenden häufig den Ureadc -Kernelservice, um Daten in einen Benutzerbereich zu übertragen.

Die uio_resid und uio_iovcnt -Felder in der UIO -Struktur, die den Datenbereich beschreiben, müssen größer als 0 sein. Sind diese Felder nicht größer als 0, wird ein Fehler zurückgegeben. Die uio_segflgMit dem Feld in der Struktur UIO wird angegeben, ob die Daten in einen Benutzer-oder Kerneldatenbereich geschrieben werden. Sie wird auch verwendet, um anzugeben, ob der Aufrufende speicherübergreifende Operationen erfordert und die erforderlichen speicherübergreifenden Deskriptoren bereitgestellt hat. Die Werte für das Flag sind in der Datei /usr/include/sys/uio.h definiert.

Wenn die Daten erfolgreich geschrieben wurden, werden die folgenden Felder in der Struktur UIO aktualisiert:

Feld Beschreibung
uio_iov Gibt die Adresse der aktuellenioveczu verwendendes Element.
uio_xmem Gibt die Adresse der aktuellenxmemzu verwendendes Element (für speicherübergreifende Kopie).
uio_iovcnt Gibt die Anzahl der verbleibendeniovecElemente.
uio_iovdcnt Gibt die Anzahl deriovecElemente bereits verarbeitet.
uio_offset Gibt den Zeichenoffset auf der Einheit an, von dem Daten gelesen werden.
uio_resid Gibt die Gesamtzahl der Zeichen an, die in dem Datenbereich verbleiben, der von deruioStruktur.
iov_base Gibt die Adresse des nächsten verfügbaren Zeichens in dem Datenbereich an, der durch den aktuelleniovecElement.
iov_len Gibt die Länge des verbleibenden Datenbereichs in dem Puffer an, der von der aktuelleniovecElement.

Ausführungsumgebung

Der Kernel-Service Ureadc kann nur über Prozessumgebung aufgerufen werden.

Rückgabewerte

Element Beschreibung
0 Erfolgreiche Ausführung.
ENOMEM Gibt an, dass kein Platz im Puffer vorhanden ist
EFAULT Gibt an, dass die Benutzerposition aus einem der folgenden Gründe nicht gültig ist:
  • Deruio_segflgFeld gibt den Benutzeradressbereich und die Basisadresse an (iov_baseFeld) verweist auf eine Position außerhalb des Benutzeradressraums.
  • Der Benutzer hat keine ausreichende Berechtigung für den Zugriff auf die Position.
  • Beim Zugriff auf die Position ist ein E/A-Fehler aufgetreten.