xdr(3) Library Functions Manual xdr(3) NOM xdr - Bibliotheque de fonctions pour transmission externe de donnees BIBLIOTHEQUE Bibliotheque C standard (libc, -lc) 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 et utilisent les types suivants : typedef int bool_t; typedef bool_t (*xdrproc_t)(XDR *, void *,...); Pour la declaration du type XDR, consultez . 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 representation externe correspondante. 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 chaines d'un certain nombre d'octets 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 appelee. 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 defini par l'appelant. Attention : pour lire depuis un flux XDR cree par cette API, il est necessaire d'appeler d'abord xdrrec_skiprecord() avant d'appeler d'autres API XDR. Cela insere des octets additionnels dans le flux pour fournir des informations de limites d'enregistrement. De plus des flux XDR crees par des API xdr*_create differentes ne sont pas compatibles pour la meme raison. 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 C 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 int *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, enum_t *dscmp, char *unp, const struct xdr_discrim *choices, xdrproc_t defaultarm); /* peut etre NULL */ Une primitive de filtrage assurant la traduction entre une union C avec discriminant et sa 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, procedure]. Si le discriminant de l'union est egal a la valeur associee, alors la procedure 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. ATTRIBUTS Pour une explication des termes utilises dans cette section, consulter attributes(7). +---------------------------------+--------------------------+---------+ |Interface | Attribut | Valeur | +---------------------------------+--------------------------+---------+ |xdr_array(), xdr_bool(), | Securite des threads | MT-Safe | |xdr_bytes(), xdr_char(), | | | |xdr_destroy(), xdr_double(), | | | |xdr_enum(), xdr_float(), | | | |xdr_free(), xdr_getpos(), | | | |xdr_inline(), xdr_int(), | | | |xdr_long(), xdrmem_create(), | | | |xdr_opaque(), xdr_pointer(), | | | |xdrrec_create(), xdrrec_eof(), | | | |xdrrec_endofrecord(), | | | |xdrrec_skiprecord(), | | | |xdr_reference(), xdr_setpos(), | | | |xdr_short(), xdrstdio_create(), | | | |xdr_string(), xdr_u_char(), | | | |xdr_u_int(), xdr_u_long(), | | | |xdr_u_short(), xdr_union(), | | | |xdr_vector(), xdr_void(), | | | |xdr_wrapstring() | | | +---------------------------------+--------------------------+---------+ 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 francaise de cette page de manuel a ete creee par Christophe Blaess , Stephan Rafin , Thierry Vignaud , Francois Micaux, Alain Portal , Jean-Philippe Guerard , Jean-Luc Coulon (f5ibh) , Julien Cristau , Thomas Huriaux , Nicolas Francois , Florentin Duneau , Simon Paillard , Denis Barbier , David Prevot et Jean-Pierre Giraud Cette traduction est une documentation libre ; veuillez vous reporter a la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n'y a aucune RESPONSABILITE LEGALE. Si vous decouvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message a . Pages du manuel de Linux 6.06 31 octobre 2023 xdr(3)