Provided by:
manpages-fr-dev_3.27fr1.4-1_all 
NOM
xdr - Bibliotheque de fonctions pour transmission externe de donnees
SYNOPSIS ET DESCRIPTION
Ces routines permettent aux programmeurs C de decrire des structures de
donnees arbitraires de maniere independante de la machine. Les donnees
pour les appels de routines distantes (RPC) sont transmises de cette
maniere.
Les prototypes ci-dessous sont declares dans <rpc/xdr.h> et utilisent
les types suivants :
typedef int bool_t;
typedef bool_t (*xdrproc_t) (XDR *, void *,...);
Pour la declaration du type XDR, consultez <rpc/xdr.h>.
bool_t xdr_array(XDR *xdrs, char **arrp, unsigned int *sizep,
unsigned int maxsize, unsigned int elsize,
xdrproc_t elproc);
Une primitive de filtrage qui traduit les tables de longueur
variable en leur representations externes correspondantes. Le
parametre arrp est l'adresse d'un pointeur sur la chaine, tandis
que sizep est l'adresse du nombre d'elements dans la table. Ce
nombre d'elements ne peut pas exceder maxsize. Le parametre
elsize est la taille (sizeof) de chaque element de la table, et
elproc est un filtre XDR de traduction entre la forme C des
elements de la table, et sa representation externe. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_bool(XDR *xdrs, bool_t *bp);
Une primitive de filtrage assurant la traduction entre les
booleens (entiers C) et leur representation externe. Durant
l'encodage des donnees, ce filtre produit soit un 1 soit un 0.
Cette routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_bytes(XDR *xdrs, char **sp, unsigned int *sizep,
unsigned int maxsize);
Une primitive de filtrage assurant la traduction entre des
tables caracteres de longueurs donnees et leur representation
externe. Le parametre sp est l'adresse du pointeur sur la
chaine. La longueur de la chaine est situee a l'adresse sizep.
Les chaines ne peuvent pas etre plus longues que maxsize. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_char(XDR *xdrs, char *cp);
Une primitive de filtrage assurant la traduction entre les
caracteres C et leur representation externe. Cette routine
renvoie 1 si elle reussit, 0 sinon. Note : les caracteres
encodes ne sont pas accoles, et occupent quatre octets chacun.
Pour les tables de caracteres, il vaut mieux se tourner vers
xdr_bytes(), xdr_opaque() ou xdr_string().
void xdr_destroy(XDR *xdrs);
Une macro invoquant la routine de destruction associee avec le
flux XDR, xdrs. La destruction entraine habituellement la
liberation de structures de donnees privees associees avec le
flux. Le comportement est indefini si on essaye d'utiliser xdrs
apres avoir invoque xdr_destroy().
bool_t xdr_double(XDR *xdrs, double *dp);
Une primitive de filtrage assurant la traduction entre les
nombres C en double precision et leur representation externe.
Cette routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_enum(XDR *xdrs, enum_t *ep);
Une primitive de filtrage assurant la traduction entre les
enumeres C enum (en realite des entiers) et leur representation
externe. Cette routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_float(XDR *xdrs, float *fp);
Une primitive de filtrage assurant la traduction entre les
nombres float C et leur representation externe. Cette routine
renvoie 1 si elle reussit, 0 sinon.
void xdr_free(xdrproc_t proc, char *objp);
Routine generique de liberation. Le premier argument est la
routine XDR de l'objet a liberer. Le second argument est un
pointeur vers l'objet lui-meme. Note : le pointeur transmis a
cette routine n'est pas libere, mais l'endroit ou il pointe est
libere (recursivement).
unsigned int xdr_getpos(XDR *xdrs);
Une macro invoquant la routine de lecture de position associee
avec le flux XDR, xdrs. Cette fonction renvoie un entier non
signe, qui indique la position dans le flux XDR. Une
fonctionnalite appreciable serait que l'arithmetique usuelle
fonctionne avec ce nombre, mais tous les flux XDR ne le
garantissent pas.
long *xdr_inline(XDR *xdrs, int len);
Une macro qui invoque la routine en-ligne associee avec le flux
XDR xdrs. Cette routine renvoie un pointeur vers une portion
continue du tampon du flux. len est la longueur en octets du
tampon desire. Note : le pointeur est converti en long *.
Attention : xdr_inline() peut renvoyer NULL (0) si elle ne peut
allouer une portion continue de tampon de la taille reclamee. Ce
comportement peut neanmoins varier d'une instance de flux a
l'autre ; elle existe par souci d'efficacite.
bool_t xdr_int(XDR *xdrs, int *ip);
Une primitive de filtrage assurant la traduction entre les
entiers C et leur representation externe. Cette routine renvoie
1 si elle reussit, 0 sinon.
bool_t xdr_long(XDR *xdrs, long *lp);
Une primitive de filtrage assurant la traduction entre les
entiers long C et leur representation externe. Cette routine
renvoie 1 si elle reussit, 0 sinon.
void xdrmem_create(XDR *xdrs, char *addr, unsigned int size,
enum xdr_op op);
Cette routine initialise l'objet flux XDR pointe par xdrs. Les
donnees du flux sont lues ou ecrites dans le bloc memoire situe
en addr et dont la longueur ne depasse pas size octets.
L'argument op determine la direction du flux XDR (XDR_ENCODE,
XDR_DECODE ou XDR_FREE).
bool_t xdr_opaque(XDR *xdrs, char *cp, unsigned int cnt);
Une primitive de filtrage assurant la traduction entre des
donnees opaques de taille fixe et leur representation externe.
Le parametre cp est l'adresse de l'objet opaque, et cnt est sa
taille en octets. Cette routine renvoie 1 si elle reussit, 0
sinon.
bool_t xdr_pointer(XDR *xdrs, char **objpp,
unsigned int objsize, xdrproc_t xdrobj);
Comme xdr_reference() sauf qu'elle met bout a bout les pointeurs
NULL alors que xdr_reference() ne le fait pas. Ainsi
xdr_pointer() peut representer des structures de donnees
recursives, comme les arbres binaires ou les listes chainees.
void xdrrec_create(XDR *xdrs, unsigned int sendsize,
unsigned int recvsize, char *handle,
int (*readit) (char *, char *, int),
int (*writeit) (char *, char *, int));
Cette routine initialise le flux XDR pointe par xdrs. Les
donnees du flux sont ecrites dans un tampon de taille sendsize.
Une valeur nulle indique que le systeme choisira une taille
adequate. Les donnees du flux sont lues depuis un tampon de
taille recvsize. De meme le systeme choisira une taille adequate
en transmettant une valeur nulle. Lorsque le tampon de sortie du
flux est plein, la fonction writeit est appele. Symetriquement,
lorsque le tampon d'entree est vide, la fonction readit est
invoquee. Le comportement de ces routines est similaire aux deux
appels systeme read(2) et write(2), sauf que le descripteur
handle est passe aux routines en tant que premier parametre.
Note : l'attribut op du flux XDR doit etre fixe par l'appelant.
Attention : ce flux XDR implemente un flux d'enregistrement
intermediaire. Il y a donc des octets supplementaires dans le
flux afin de separer les enregistrements.
bool_t xdrrec_endofrecord(XDR *xdrs, int sendnow);
Cette routine ne peut etre invoquee que sur des flux cree par
xdrrec_create(). Les donnees dans le tampon de sortie sont
considerees comme un enregistrement complet, et le tampon de
sortie est eventuellement ecrit si sendnow est non nul. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdrrec_eof(XDR *xdrs);
Cette routine ne peut etre invoque que sur des flux crees par
xdrrec_create(). Apres avoir rempli le reste de l'enregistrement
avec les donnees du flux, cette routine renvoie 1 si le flux n'a
plus de donnees d'entree, et 0 sinon.
bool_t xdrrec_skiprecord(XDR *xdrs);
Cette routine ne peut etre invoque que sur des flux crees par
xdrrec_create(). Elle indique a l'implementation XDR que le
reste de l'enregistrement en cours dans le tampon d'entree doit
etre elimine. Cette routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_reference(XDR *xdrs, char **pp, unsigned int size,
xdrproc_t proc);
Une primitive qui gere les pointeurs sur les structures. Le
parametre pp est l'adresse du pointeur, size est la taille
(sizeof) de la structure pointee par *pp, et proc est la
procedure XDR qui filtre la structure entre sa forme C et sa
representation externe. Cette routine renvoie 1 si elle reussit,
et 0 sinon.
Attention : cette routine ne comprend pas les pointeurs NULL.
Utilisez xdr_pointer() a sa place.
xdr_setpos(XDR *xdrs, unsigned int pos);
Une macro qui invoque la routine de positionnement associee au
flux XDR xdrs. Le parametre pos est une valeur de position
obtenue avec xdr_getpos(). Cette routine renvoie 1 si le flux
XDR peut etre repositionne, et zero sinon.
Attention : il est difficile de repositionner certains types de
flux XDR ce qui peut faire echouer cette routine avec certains
flux, et reussir avec d'autres.
bool_t xdr_short(XDR *xdrs, short *sp);
Une primitive de filtrage assurant la traduction entre les
entiers short et leur representation externe. Cette routine
renvoie 1 si elle reussit, 0 sinon.
void xdrstdio_create(XDR *xdrs, FILE *file, enum xdr_op op);
Cette routine initialise l'objet flux XDR pointe par xdrs. Les
donnees du flux XDR sont ecrites dans - ou lues depuis - le flux
d'entree-sortie standard file. Le parametre op determine la
direction du flux XDR (XDR_ENCODE, XDR_DECODE ou XDR_FREE).
Attention : la routine de destruction associee avec un tel flux
XDR appelle fflush(3) sur le flux file, mais pas fclose(3).
bool_t xdr_string(XDR *xdrs, char **sp, unsigned int maxsize);
Une primitive de filtrage assurant la traduction entre les
chaines de caracteres C et leur representation externe. Les
chaines ne peuvent pas etre plus longues que maxsize. Note : sp
est l'adresse du pointeur sur la chaine. Cette routine renvoie 1
si elle reussit, 0 sinon.
bool_t xdr_u_char(XDR *xdrs, unsigned char *ucp);
Une primitive de filtrage assurant la traduction entre les
caracteres unsigned du C et leur representation externe. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_u_int(XDR *xdrs, unsigned *up);
Une primitive de filtrage assurant la traduction entre les
entiers unsigned du C et leur representation externe. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_u_long(XDR *xdrs, unsigned long *ulp);
Une primitive de filtrage assurant la traduction entre les
entiers unsigned long du C et leur representation externe. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_u_short(XDR *xdrs, unsigned short *usp);
Une primitive de filtrage assurant la traduction entre les
entiers unsigned short du C et leur representation externe.
Cette routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_union(XDR *xdrs, int *dscmp, char *unp,
struct xdr_discrim *choices,
xdrproc_t defaultarm); /* peut ^etre NULL */
Une primitive de filtrage assurant la traduction entre une union
C avec discriminant et la representation externe correspondante.
Elle traduit d'abord le discriminant de l'union, situe en dscmp.
Le discriminant doit toujours etre du type enum_t. Ensuite,
l'union situee en unp est traduite. Le parametre choices est un
pointeur sur une table de structures xdr_discrim(). Chaque
structure contient une paire ordonnee [valeur, proc'edure]. Si le
discriminant de l'union est egal a une valeur, alors la
proc'edure associee est invoquee pour traduire l'union. La fin de
la table de structures xdr_discrim() est indiquee par une
routine de valeur NULL. Si le discriminant n'est pas trouve dans
la table choices, alors la procedure defaultarm est invoquee (si
elle ne vaut pas NULL). Cette routine renvoie 1 si elle reussit,
0 sinon.
bool_t xdr_vector(XDR *xdrs, char *arrp, unsigned int size,
unsigned int elsize, xdrproc_t elproc);
Une primitive de filtrage assurant la traduction entre les
tables de longueur fixe, et leur representation externe. Le
parametre arrp est l'adresse du pointeur sur la table, tandis
que size est le nombre d'elements dans la table. Le parametre
elsize est la taille (sizeof) d'un element de la table, et
elproc est un filtre XDR assurant la traduction entre la forme C
des elements de la table et leur representation externe. Cette
routine renvoie 1 si elle reussit, 0 sinon.
bool_t xdr_void(void);
Cette routine renvoie toujours 1. Elle peut etre passee aux
routines RPC qui ont besoin d'une fonction en parametre alors
que rien ne doit etre fait.
bool_t xdr_wrapstring(XDR *xdrs, char **sp);
Une primitive qui appelle xdr_string(xdrs, sp, MAXUN.UNSIGNED);
ou MAXUN.UNSIGNED est la valeur maximale d'un entier non signe.
xdr_wrapstring() est pratique car la bibliotheque RPC passe un
maximum de deux routines XDR comme parametres, et xdr_string(),
l'une des primitives les plus frequemment utilisees en requiert
trois. Cette routine renvoie 1 si elle reussit, 0 sinon.
VOIR AUSSI
rpc(3)
Les manuels suivants :
eXternal Data Representation Standard: Protocol Specification
eXternal Data Representation: Sun Technical Notes
XDR: External Data Representation Standard, RFC 1014, Sun
Microsystems, Inc., USC-ISI.
COLOPHON
Cette page fait partie de la publication 3.27 du projet man-pages
Linux. Une description du projet et des instructions pour signaler des
anomalies peuvent etre trouvees a l'adresse
<URL:http://www.kernel.org/doc/man-pages/>.
TRADUCTION
Depuis 2010, cette traduction est maintenue a l'aide de l'outil po4a
<URL:http://po4a.alioth.debian.org/> par l'equipe de traduction
francophone au sein du projet perkamon
<URL:http://perkamon.alioth.debian.org/>.
Christophe Blaess <URL:http://www.blaess.fr/christophe/> (1996-2003),
Alain Portal <URL:http://manpagesfr.free.fr/> (2003-2006). Nicolas
Francois et l'equipe francophone de traduction de Debian (2006-2009).
Veuillez signaler toute erreur de traduction en ecrivant a
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet manpages-fr.
Vous pouvez toujours avoir acces a la version anglaise de ce document
en utilisant la commande << man -L C <section> <page_de_man> >>.
30 decembre 2007 XDR(3)