Man page - xdr_reference(3)

Packages contains this manual

Available languages:

en fr es ja ru

Manual

xdr

NOM
BIBLIOTHÈQUE
SYNOPSIS ET DESCRIPTION
ATTRIBUTS
VOIR AUSSI
TRADUCTION

NOM

xdr - BibliothÚque de fonctions pour transmission externe de données

BIBLIOTHÈQUE

BibliothĂšque C standard ( libc , -lc )

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.

Les prototypes ci-dessous sont déclarés dans <rpc/xdr.h> et utilisent les types suivants :

typedef int bool_t ;

typedef bool_t (* xdrproc_t )(XDR *, void *,...);

Pour la déclaration 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 reprĂ©sentation externe correspondante. 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.

bool_t xdr_bool(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.

bool_t xdr_bytes(XDR * xdrs , char ** sp , unsigned int * sizep ,
unsigned int
maxsize );

Une primitive de filtrage assurant la traduction entre des chaĂźnes d’un certain nombre d’octets 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 . Les chaĂźnes ne peuvent pas ĂȘtre plus longues que maxsize . Cette routine renvoie 1 si elle rĂ©ussit, 0 sinon.

bool_t xdr_char(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(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 ().

bool_t xdr_double(XDR * xdrs , double * dp );

Une primitive de filtrage assurant la traduction entre les nombres C en double précision et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon.

bool_t xdr_enum(XDR * xdrs , enum_t * ep );

Une primitive de filtrage assurant la traduction entre les énumérés C enum (en réalité des entiers) et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon.

bool_t xdr_float(XDR * xdrs , float * fp );

Une primitive de filtrage assurant la traduction entre les nombres float C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon.

void xdr_free(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).

unsigned int xdr_getpos(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(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 tampon du flux. len est la longueur en octets du tampon 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 tampon de la taille rĂ©clamĂ©e. Ce comportement peut nĂ©anmoins varier d’une instance de flux Ă  l’autre ; elle existe par souci d’efficacitĂ©.

bool_t xdr_int(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.

bool_t xdr_long(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(XDR * xdrs , char * addr , unsigned 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 ).

bool_t xdr_opaque(XDR * xdrs , char * cp , unsigned 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.

bool_t xdr_pointer(XDR * xdrs , char ** objpp ,
unsigned 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(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 pointĂ© par xdrs . Les donnĂ©es du flux sont Ă©crites dans un tampon 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 tampon de taille recvsize . De mĂȘme le systĂšme choisira une taille adĂ©quate en transmettant une valeur nulle. Lorsque le tampon de sortie du flux est plein, la fonction writeit est appelĂ©e. SymĂ©triquement, lorsque le tampon d’entrĂ©e est vide, la fonction readit est invoquĂ©e. Le comportement de ces routines est similaire aux deux appels systĂšme read (2) et write (2), sauf que le descripteur handle est passĂ© aux routines en tant que premier paramĂštre. Note : l’attribut op du flux XDR doit ĂȘtre dĂ©fini par l’appelant.

Attention : pour lire depuis un flux XDR créé par cette API, il est nĂ©cessaire d’appeler d’abord xdrrec_skiprecord () avant d’appeler d’autres API XDR. Cela insĂšre des octets additionnels dans le flux pour fournir des informations de limites d’enregistrement. De plus des flux XDR créés par des API xdr*_create diffĂ©rentes ne sont pas compatibles pour la mĂȘme raison.

bool_t xdrrec_endofrecord(XDR * xdrs , int sendnow );

Cette routine ne peut ĂȘtre invoquĂ©e que sur des flux créé par xdrrec_create (). Les donnĂ©es dans le tampon de sortie sont considĂ©rĂ©es comme un enregistrement complet, et le tampon de sortie est Ă©ventuellement Ă©crit si sendnow est non nul. Cette routine renvoie 1 si elle rĂ©ussit, 0 sinon.

bool_t xdrrec_eof(XDR * xdrs );

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.

bool_t xdrrec_skiprecord(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 tampon d’entrĂ©e doit ĂȘtre Ă©liminĂ©. Cette routine renvoie 1 si elle rĂ©ussit, 0 sinon.

bool_t xdr_reference(XDR * xdrs , char ** pp , unsigned 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(XDR * xdrs , unsigned 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.

bool_t xdr_short(XDR * xdrs , short * sp );

Une primitive de filtrage assurant la traduction entre les entiers short C et leur représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon.

void xdrstdio_create(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 (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 chaĂźnes de caractĂšres C et leur reprĂ©sentation externe. Les chaĂźnes 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.

bool_t xdr_u_char(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.

bool_t xdr_u_int(XDR * xdrs , unsigned int * 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.

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 représentation externe. Cette routine renvoie 1 si elle réussit, 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 représentation externe. Cette routine renvoie 1 si elle réussit, 0 sinon.

bool_t xdr_union(XDR * xdrs , enum_t * dscmp , char * unp ,
const struct xdr_discrim *
choices ,
xdrproc_t
defaultarm ); /* peut ĂȘtre NULL */

Une primitive de filtrage assurant la traduction entre une union C avec discriminant et sa 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 Ă  la valeur associĂ©e, alors la procĂ©dure 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.

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 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.

bool_t xdr_void(void);

Cette routine renvoie toujours 1 . Elle peut ĂȘtre passĂ©e aux routines RPC qui ont besoin d’une fonction en paramĂštre alors que rien ne doit ĂȘtre fait.

bool_t xdr_wrapstring(XDR * xdrs , char ** sp );

Une primitive qui appelle xdr_string(xdrs, sp, MAXUN.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.

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3873880-1.png

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.

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .