Service de noyau uiomove

Objectif

Déplace un bloc de données entre un espace de noyau et un espace défini par une structure uio .

Syntaxe

#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;

Paramètres

Article Descriptif
cp Indique l'adresse dans la mémoire du noyau à partir de laquelle les données sont déplacées.
n Indique le nombre d'octets à déplacer.
Rw Indique la direction du déplacement:
LU UIO_LU
Copie les données de l'espace de noyau dans l'espace décrit par la structure uio .
ECRIT_UIO_ÉCRITURE
Copie les données de l'espace décrit par la structure uio dans l'espace de noyau.
Uiop Pointe vers une structure uio décrivant la mémoire tampon utilisée dans le transfert de données.

Descriptif

Le service de noyau uiomove déplace le nombre d'octets de données spécifié entre l'espace de noyau et un espace décrit par une structureuio. Les moitiés supérieures du pilote de périphérique, en particulier les pilotes de périphérique de type caractère, utilisent fréquemment le service uiomove pour transférer des données vers ou en dehors d'une zone utilisateur. Les zones uio_resid et uio_iovcnt de la structure uio décrivant la zone de données doivent être supérieures à 0, sinon une erreur est renvoyée.

Le service uiomove déplace le nombre d'octets de données spécifié par le paramètre n ou uio_resid , la valeur la moins élevée étant retenue. Si le paramètre n ou uio_resid est 0, aucune donnée n'est déplacée. La zone uio_segflg de la structure uio est utilisée pour indiquer si le déplacement accède à une zone de données d'utilisateur ou de noyau ou si l'appelant requiert des opérations intermémoire et a fourni les descripteurs intermémoire requis. Si une opération intermémoire est indiquée, il doit y avoir un descripteur intermémoire dans le tableau uio_xmem pour chaque élément iovec .

Si le déplacement aboutit, les zones suivantes de la structure uio sont mises à jour:

Zone Descriptif
uio_iov Indique l'adresse de l'élément iovec en cours à utiliser.
uio_xmem Indique l'adresse de l'élément xmem en cours à utiliser.
uio_iovcnt Indique le nombre d'éléments iovec restants.
uio_iovdcnt Indique le nombre d'éléments iovec déjà traités.
uio_offset Indique le décalage de caractère sur l'unité exécutant les E-S.
uio_resid Indique le nombre total de caractères restant dans la zone de données décrite par la structure uio .
iov_base Indique l'adresse de la zone de données décrite par l'élément iovec en cours.
iov_len Indique la longueur de la zone de données restante dans la mémoire tampon décrite par l'élément iovec en cours.

Environnement d'exécution

Le service de noyau uiomove ne peut être appelé qu'à partir de l' environnement de processus .

Valeurs renvoyées

Article Descriptif
0 % Indique que l'exécution a réussi.
ENOMEM Indique qu'il n'y a pas de place dans la mémoire tampon.
EIO Indique un espace fichier d'erreur d'E-S permanent.
ENOSPC Indique un espace disque insuffisant.
EDÉFAUT Indique un emplacement utilisateur non valide.