man xdr (Fonctions bibliothèques) - Bibliothèque de fonctions pour transmission externe de données.
NOM
xdr - Bibliothèque de fonctions pour transmission externe de données.
SYNOPSIS ET DESCRIPTION
Ces routines permettent aux programmeurs C de décrire des structures de données arbitraires de manière indépendante de la machine. Les données pour les appels de routines distantes (RPC) sont transmises de cette manière.
xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc) XDR *xdrs; char **arrp; u_int *sizep, maxsize, elsize; xdrproc_t elproc;
-
Une primitive de filtrage qui traduit les tables de longueur variable
en leur représentations externes correspondantes. Le
paramètre
arrp
est l'adresse d'un pointeur sur la chaîne, tandis que
sizep
est l'adresse du nombre d'éléments dans la table.
Ce nombre d'éléments ne peut pas excéder
maxsize.
Le paramètre
elsize
est la taille
(sizeof)
de chaque élément de la table, et
elproc
est un filtre
XDR
de traduction entre la forme C des
éléments de la table, et sa représentation
externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_bool(xdrs, bp) XDR *xdrs; bool_t *bp;
-
Une primitive de filtrage assurant la traduction entre les booléens
(entiers C)
et leur représentation externe. Durant l'encodage des données, ce filtre
produit soit un 1 soit un 0.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_bytes(xdrs, sp, sizep, maxsize) XDR *xdrs; char **sp; u_int *sizep, maxsize;
-
Une primitive de filtrage assurant la traduction entre des tables
caractères de longueurs données et leur représentation externe.
Le paramètre
sp
est l'adresse du pointeur sur la chaîne. La longueur de la chaîne
est située à l'adresse
sizep.
Le chaînes ne peuvent pas être plus longues que
maxsize.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_char(xdrs, cp) XDR *xdrs; char *cp;
-
Une primitive de filtrage assurant la traduction entre les caractères C
et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
Note: Les caractères encodés ne sont pas accolés, et occupent quatre octets chacun.
Pour les tables de caractères, il vaut mieux
se tourner vers
xdr_bytes(),
xdr_opaque()
ou
xdr_string().
void xdr_destroy(xdrs) XDR *xdrs;
-
Une macro invoquant la routine de destruction associée avec le flux
XDR
xdrs.
La destruction entraîne habituellement la libération de structures de données
privées associées avec le flux. Le comportement est indéfini si on essaye d'utiliser
xdrs
après avoir invoqué
xdr_destroy().
xdr_double(xdrs, dp) XDR *xdrs; double *dp;
-
Une primitive de filtrage assurant la traduction entre
les nombres C en
double
precision et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_enum(xdrs, ep) XDR *xdrs; enum_t *ep;
-
Une primitive de filtrage assurant la traduction entre les énumérés C
enums
(en réalité des entiers) et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_float(xdrs, fp) XDR *xdrs; float *fp;
-
Une primitive de filtrage assurant la traduction entre les nombres
floats
C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
void xdr_free(proc, objp) xdrproc_t proc; char *objp;
-
Routine générique de libération. Le premier argument est la routine
XDR
de l'objet à libérer. Le second argument est un pointeur vers l'objet lui-même.
Note : le pointeur transmis à cette routine n'est
pas
libéré, mais l'endroit où il pointe
est
libéré (récursivement).
u_int xdr_getpos(xdrs) XDR *xdrs;
-
Une macro invoquant la routine de lecture de position
associée avec le flux
XDR
xdrs.
Cette fonction renvoie un entier non-signé, qui
indique la position dans le flux
XDR .
Une fonctionnalité appréciable
serait que l'arithmétique usuelle fonctionne avec ce nombre,
mais tous les flux
XDR
ne le garantissent pas.
long * xdr_inline(xdrs, len) XDR *xdrs; int len;
- Une macro qui invoque la routine en-ligne associée avec le flux XDR xdrs. Cette routine renvoie un pointeur vers une portion continue du buffer du flux. len est la longueur en octets du buffer désiré Note: Le pointeur est converti en long *.
-
Attention :
xdr_inline()
peut renvoyer
NULL
(0)
si elle ne peut allouer une portion continue de buffer de la taille réclamée.
xdr_int(xdrs, ip) XDR *xdrs; int *ip;
-
Une primitive de filtrage assurant la traduction entre les entiers C
et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_long(xdrs, lp) XDR *xdrs; long *lp;
-
Une primitive de filtrage assurant la traduction entre les entiers
long
C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
void xdrmem_create(xdrs, addr, size, op) XDR *xdrs; char *addr; u_int size; enum xdr_op op;
-
Cette routine initialise l'objet flux
XDR
pointé par
xdrs.
Les données du flux sont lues ou écrites dans le bloc
mémoire situé en
addr
et dont la longueur ne dépasse pas
size
octets. L'argument
op
détermine la direction du flux
XDR
(XDR_ENCODE,
XDR_DECODE,
ou
XDR_FREE).
xdr_opaque(xdrs, cp, cnt) XDR *xdrs; char *cp; u_int cnt;
-
Une primitive de filtrage assurant la traduction entre
des données opaques de taille fixe
et leur représentation externe.
Le paramètre
cp
est l'adresse de l'objet opaque, et
cnt
est sa taille en octets.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_pointer(xdrs, objpp, objsize, xdrobj) XDR *xdrs; char **objpp; u_int objsize; xdrproc_t xdrobj;
-
Comme
xdr_reference()
sauf qu'elle met bout à bout les pointeurs
NULL
alors que
xdr_reference()
ne le fait pas. Ainsi
xdr_pointer()
peut représenter
des structures de données récursives, comme les arbres binaires
ou les listes chaînées.
void xdrrec_create(xdrs, sendsize, recvsize, handle, readit, writeit) XDR *xdrs; u_int sendsize, recvsize; char *handle; int (*readit) (), (*writeit) ();
- Cette routine initialise le flux XDR pointé par xdrs. Les données du flux sont écrites dans un buffer de taille sendsize. Une valeur nulle indique que le système choisira une taille adéquate. Les données du flux sont lues depuis un buffer de taille recvsize. De même le système choisira une taille adéquate en transmettant une valeur nulle. Lorsque le buffer de sortie du flux est plein, la fonction writeit est appelé. Symétriquement, lorsque le buffer d'entrée est vide, la fonction readit est invoquée. Le comportement de ces routines est similaire aux deux appels-système read et write, sauf que le descripteur handle est passé aux routines en tant que premier paramètres. Note: L'attribut op du flux XDR doit être fixé par l'appelant.
-
Attention : ce flux
XDR
implémente un flux d'enregistrement intermédiaire.
Il y a donc des octets supplémentaires dans le flux
afin de séparer les enregistrements.
xdrrec_endofrecord(xdrs, sendnow) XDR *xdrs; int sendnow;
-
Cette routine ne peut être invoquée que
sur des flux créé par
xdrrec_create().
Les données dans le buffer de sortie sont considérées
comme un enregistrement complet,
et le buffer de sortie est éventuellement écrit si
sendnow
est non-nul.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdrrec_eof(xdrs) XDR *xdrs; int empty;
-
Cette routine ne peut être invoqué que sur
des flux créés par
xdrrec_create().
Après avoir rempli le reste de l'enregistrement avec les données du flux,
cette routine renvoie 1 si le flux n'a plus de données d'entrée,
et 0 sinon.
xdrrec_skiprecord(xdrs) XDR *xdrs;
-
Cette routine ne peut être invoqué que sur
des flux créés par
xdrrec_create().
Elle indique à l'implémentation
XDR
que le reste de l'enregistrement en cours dans le
buffer d'entrée doit être éliminé.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_reference(xdrs, pp, size, proc) XDR *xdrs; char **pp; u_int size; xdrproc_t proc;
- Une primitive qui gère les pointeurs sur les structures. Le paramètre pp est l'adresse du pointeur, size est la taille (sizeof) de la structure pointée par *pp, et proc est la procédure XDR qui filtre la structure entre sa forme C et sa représentation externe. Cette routine renvoie 1 si elle réussit, et 0 sinon.
-
Attention : cette routine ne comprend pas les pointeurs
NULL.
Utilisez
xdr_pointer()
à sa place.
xdr_setpos(xdrs, pos) XDR *xdrs; u_int pos;
- Une macro qui invoque la routine de positionnement associée au flux XDR xdrs. Le paramètre pos est une valeur de position obtenue avec xdr_getpos(). Cette routine renvoie 1 si le flux XDR peut être repositionné, et zéro sinon.
-
Attention : il est difficile de repositionner certains types de flux
XDR
ce qui peut faire échouer cette routine avec certains
flux, et réussir avec d'autres.
xdr_short(xdrs, sp) XDR *xdrs; short *sp;
-
Une primitive de filtrage assurant la traduction entre les entiers
short
et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
void xdrstdio_create(xdrs, file, op) XDR *xdrs; FILE *file; enum xdr_op op;
- Cette routine initialise l'objet flux XDR pointé par xdrs. Les données du flux XDR sont écrites dans - ou lues depuis - le flux d'entrée/sortie standard file. Le paramètre op détermine la direction du flux XDR (XDR_ENCODE, XDR_DECODE, ou XDR_FREE).
-
Attention : la routine de destruction associée avec un tel flux
XDR
appelle
fflush()
sur le flux
file,
mais pas
fclose().
xdr_string(xdrs, sp, maxsize) XDR *xdrs; char **sp; u_int maxsize;
-
Une primitive de filtrage assurant la traduction entre
les chaînes de caractères C
et leur représentation externe.
Les chaîne ne peuvent pas être plus longues que
maxsize.
Note:
sp
est l'adresse du pointeur sur la chaîne.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_u_char(xdrs, ucp) XDR *xdrs; unsigned char *ucp;
-
Une primitive de filtrage assurant la traduction entre les caractères
unsigned
du C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_u_int(xdrs, up) XDR *xdrs; unsigned *up;
-
Une primitive de filtrage assurant la traduction entre les entiers
unsigned
du C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_u_long(xdrs, ulp) XDR *xdrs; unsigned long *ulp;
-
Une primitive de filtrage assurant la traduction entre les entiers
unsigned long
du C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_u_short(xdrs, usp) XDR *xdrs; unsigned short *usp;
-
Une primitive de filtrage assurant la traduction entre les entiers
unsigned short
du C et leur représentation externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_union(xdrs, dscmp, unp, choices, dfault) XDR *xdrs; int *dscmp; char *unp; struct xdr_discrim *choices; bool_t (*defaultarm) (); /* may equal NULL */
-
Une primitive de filtrage assurant la traduction entre une
union
C avec discriminant et la représentation externe correspondante. Elle traduit
d'abord le discriminant de l'union, situé en
dscmp.
Le discriminant doit toujours être du type
enum_t.
Ensuite, l'union située en
unp
est traduite. Le paramètre
choices
est un pointeur sur une table de structures
xdr_discrim().
Chaque structure contient une paire ordonnée
[valeur, procédure].
Si le discriminant de l'union est égal à une
valeur,
alors la
procédure
associée est invoquée pour traduire l'union. La fin de la table de structures
xdr_discrim()
est indiquée par une routine de valeur
NULL.
Si le discriminant n'est pas trouvé dans la table
choices,
alors la procédure
defaultarm
est invoquée (si elle ne vaut pas
NULL).
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_vector(xdrs, arrp, size, elsize, elproc) XDR *xdrs; char *arrp; u_int size, elsize; xdrproc_t elproc;
-
Une primitive de filtrage assurant la traduction entre
les tables de longueur fixe,
et leur représentation externe.
Le
paramètre
arrp
est l'adresse du pointeur sur la table, tandis que
size
est le nombre d'éléments dans la table. Le paramètre
elsize
est la taille
(sizeof)
d'un élément de la table, et
elproc
est un filtre
XDR
assurant la traduction entre la forme C des
éléments de la table et leur représentation
externe.
Cette routine renvoie 1 si elle réussit, 0 sinon.
xdr_void()
-
Cette routine renvoie toujours 1.
Elle peut être passée aux routines
RPC
qui ont besoin d'une fonction en argument alors
que rien ne doit être fait.
xdr_wrapstring(xdrs, sp) XDR *xdrs; char **sp;
- Une primitive qui appelle xdr_string(xdrs, sp,1MAXUN.UNSIGNED); où MAXUN.UNSIGNED est la valeur maximale d'un entier non signé. xdr_wrapstring() est pratique car la bibliothèque RPC passe un maximum de deux routines XDR comme paramètres, et xdr_string(), l'une des primitives les plus fréquemment utilisées en requiert trois. Cette routine renvoie 1 si elle réussit, 0 sinon.
VOIR AUSSI
Les manuels suivants :
eXternal Data Representation Standard: Protocol Specification
eXternal Data Representation: Sun Technical Notes
XDR: External Data Representation Standard,
RFC1014, Sun Microsystems, Inc.,
USC-ISI.
TRADUCTION
Christophe Blaess, 2000-2003.
CETTE PAGE DOCUMENTE AUSSI :
- xdr_array
- xdr_bool
- xdr_bytes
- xdr_char
- xdr_destroy
- xdr_double
- xdr_enum
- xdr_float
- xdr_free
- xdr_getpos
- xdr_inline
- xdr_int
- xdr_long
- xdr_opaque
- xdr_pointer
- xdr_reference
- xdr_setpos
- xdr_short
- xdr_string
- xdr_u_char
- xdr_u_int
- xdr_u_long
- xdr_u_short
- xdr_union
- xdr_vector
- xdr_void
- xdr_wrapstring
- xdrmem_create
- xdrrec_create
- xdrrec_endofrecord
- xdrrec_eof
- xdrrec_skiprecord
- xdrstdio_create