Provided by: manpages-pt-dev_20040726-4_all bug

NOME

       xdr - rotinas de biblioteca para representação externa de dados

SINOPSE E DESCRIÇÃO

       Estas  rotinas  permitem  que  programadores  C descrevam estruturas de
       dados arbitrariamente em um modelo independente de máquina. Dados  para
       chamadas de procedimento remoto são transmitidos usando estas rotinas.

       xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc)
       XDR *xdrs;
       char **arrp;
       u_int *sizep, maxsize, elsize;
       xdrproc_t elproc;

              Uma primitiva de filtro que traduz entre matrizes de comprimento
              variável  e  suas  representações  externas  correspondentes.  O
              parâmetro  arrp é o endereço do ponteiro para a matriz, enquanto
              sizep é o endereço do elemento 'count' da matriz; este  elemento
              'count' não pode exceder maxsize.  O parâmetro elsize é o sizeof
              de cada um dos elementos da matriz, e elproc é um filtro XDR que
              traduz  entre  o  formato  C  dos  elementos  da  matriz  e suas
              representações externas.  Esta rotina retorna  um  se  for  bem-
              sucedida, e zero caso contrário.

       xdr_bool(xdrs, bp)
       XDR *xdrs;
       bool_t *bp;

              Uma  primitiva de filtro que traduz entre booleanos (inteiros C)
              e suas representações  externas.  Quando  codifica  dados,  este
              filtro  produz  valores 'um' ou 'zero'. Esta rotina retorna 'um'
              se for bem-sucedida, e 'zero' em caso contrário.

       xdr_bytes(xdrs, sp, sizep, maxsize)
       XDR *xdrs;
       char **sp;
       u_int *sizep, maxsize;

              Uma primitiva de  filtro  que  traduz  entre  strings  de  bytes
              contados  e  suas  representações  externas.  O parâmetro sp é o
              endereço do ponteiro  de  string.  O  comprimento  da  string  é
              localizado  no endereço sizep; strings não podem ser maiores que
              maxsize.  Esta rotina retorna 'um' se for  bem-sucedida,  'zero'
              em caso contrário.

       xdr_char(xdrs, cp)
       XDR *xdrs;
       char *cp;

              Uma  primitiva  de  filtro  que traduz entre caracteres C e suas
              representações externas.  Esta rotina retorna 'um' se  for  bem-
              sucedida,   e   'zero'  em  caso  contrário.   Nota:  caracteres
              codificados não são empacotados, e ocupam  4  bytes  cada.  Para
              matrizes  de  caracteres,  vale  a  pena considerar xdr_bytes(),
              xdr_opaque() ou xdr_string().

       void
       xdr_destroy(xdrs)
       XDR *xdrs;

              Uma macro que invoca a rotina destrutiva associada com  o  fluxo
              XDR,   xdrs.   Destruição  geralmente  envolve  a  liberação  de
              estruturas de dados privativas associadas com o fluxo. O uso  de
              xdrs depois de invocar xdr_destroy() é indefinido.

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

              Uma  primitiva  de  filtro  que traduz entre números de precisão
              dupla do C e suas representações externas. Esta  rotina  retorna
              'um' se for bem-sucedida, e 'zero' em caso contrário.

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

              Uma  primitiva  de  filtro que traduz entre enums da linguagem C
              (atualmente inteiros)  e  suas  representações  externas.   Esta
              rotina  retorna  'um'  se  for  bem-sucedida,  e  'zero' em caso
              contrário.

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

              Uma primitiva de filtro que traduz entre floats da linguagem C e
              suas  representações  externas.  Esta rotina retorna 'um' se for
              bem-sucedida, e 'zero' em caso contrário.

       void
       xdr_free(proc, objp)
       xdrproc_t proc;
       char *objp;

              Rotina de liberação genérica. O primeiro argumento  é  a  rotina
              XDR  para  o  objeto  sendo  liberado.  O segundo argumento é um
              ponteiro para o próprio objeto. Nota: o  ponteiro  passado  para
              esta  rotina no é liberado, mas aquele para o qual ele aponta 
              liberado (recursivamente).

       u_int
       xdr_getpos(xdrs)
       XDR *xdrs;

              Uma macro que invoca a rotina  'pega-posição'  associada  com  o
              fluxo  XDR  ,  xdrs.  A rotina retorna um inteiro sem sinal, que
              indica a posição do  fluxo  de  bytes  XDR.   Uma  implementação
              desejável  do  fluxo  XDR  é que aritmética simples funcione com
              este número, apesar de que instâncias do fluxo XDR não  precisam
              garantir isso.

       long *
       xdr_inline(xdrs, len)
       XDR *xdrs;
       int len;

              Uma  macro  que invoca a rotina 'em-linha' associada com o fluxo
              XDR , xdrs.   A  rotina  retorna  um  ponteiro  para  uma  parte
              contígua  do  buffer  do  fluxo; len é o comprimento em bytes do
              buffer desejado.  Nota: o ponteiro é um 'cast' para long *.

              Atenção: xdr_inline() pode retornar NULL (0) se  ele  não  puder
              alocar uma parte contígua de um buffer. Portanto o comportamento
              pode  variar  entre  instâncias  do   fluxo;   ele   existe   em
              consideração à eficiência.

       xdr_int(xdrs, ip)
       XDR *xdrs;
       int *ip;

              Uma  primitiva  de  filtro que traduz entre inteiros do C e suas
              representações externas. Estas rotinas retornam  'um'  se  forem
              bem-sucedidas, e 'zero' em caso contrário.

       xdr_long(xdrs, lp)
       XDR *xdrs;
       long *lp;

              Uma  primitiva de filtro que traduz entre inteiros longos do C e
              suas representações externas.  Esta rotina retorna 'um'  se  for
              bem-sucedida, e 'zero' em caso contrário.

       void
       xdrmem_create(xdrs, addr, size, op)
       XDR *xdrs;
       char *addr;
       u_int size;
       enum xdr_op op;

              Esta  rotina inicializa o objeto de fluxo XDR apontado por xdrs.
              Os dados do fluxo são escritos ou lidos de um pedaço de  memória
              na posição addr , cujo comprimento não é maior que size bytes. O
              op determina a direção do fluxo XDR ( XDR_ENCODE, XDR_DECODE, ou
              XDR_FREE).

       xdr_opaque(xdrs, cp, cnt)
       XDR *xdrs;
       char *cp;
       u_int cnt;

              Uma primitiva de filtro que traduz entre dados opacos de tamanho
              fixo e sua representação externa.  O parâmetro cp é  o  endereço
              do  objeto  opaco,  e cnt é o seu tamanho em bytes.  Esta rotina
              retorna 'um' se for bem-sucedida, e 'zero' em caso contrário.

       xdr_pointer(xdrs, objpp, objsize, xdrobj)
       XDR *xdrs;
       char **objpp;
       u_int objsize;
       xdrproc_t xdrobj;

              Como  xdr_reference()  se  excetua  pelo  fato   de   serializar
              ponteiros NULL, uma vez que xdr_reference() não o faz. Portanto,
              xdr_pointer() pode representar estruturas de  dados  recursivos,
              como árvores binárias ou listas ligadas.

       void
       xdrrec_create(xdrs, sendsize, recvsize, handle, readit, writeit)
       XDR *xdrs;
       u_int sendsize, recvsize;
       char *handle;
       int (*readit) (), (*writeit) ();

              Esta  rotina inicializa o objeto de fluxo XDR apontado por xdrs.
              Os dados do fluxo são escritos em um buffer de tamanho sendsize;
              um  valor  'zero'  indica  que  o  sistema  deve  usar um padrão
              conveniente.  Os dados do  fluxo  são  lidos  de  um  buffer  de
              tamanho.   recvsize;  ele  também pode ser setado para um padrão
              conveniente pela passagem de um valor igual a zero.   Quando  um
              buffer  de  saída  do  fluxo  está  cheio,  writeit  é  chamado.
              Similarmente, quando um buffer de entrada do fluxo  está  vazio,
              readit  é chamado. O comportamento destas duas rotinas é similar
              às chamadas de sistema read e write, exceto  pelo  fato  de  que
              handle é passado para a antiga rotina como o primeiro parâmetro.
              Nota: o campo op do fluxo XDR precisa ser setado pelo chamador.

              Atenção:  este  fluxo  XDR  implementa  um  fluxo  de   registro
              intermediário.  Portanto,  há  bytes  adicionais  no  fluxo para
              prover informações de limite de registro.

       xdrrec_endofrecord(xdrs, sendnow)
       XDR *xdrs;
       int sendnow;

              Esta rotina pode ser invocada  somente  em  fluxos  criados  por
              xdrrec_create().   Os dados no buffer de saída são marcados como
              um  registro  completo,  e  o  buffer   de   saída   é   enviado
              opcionalmente se sendnow não é zero. Esta rotina retorna 'um' se
              for bem-sucedida, e 'zero' em caso contrário.

       xdrrec_eof(xdrs)
       XDR *xdrs;
       int empty;

              Esta rotina pode ser invocada  somente  em  fluxos  criados  por
              xdrrec_create().    Depois  de  consumir  o  resto  do  registro
              corrente no fluxo, esta rotina retorna

       xdrrec_skiprecord(xdrs)
       XDR *xdrs;

              Esta rotina pode ser invocada  somente  em  fluxos  criados  por
              xdrrec_create().   Ele  diz  à  implementação XDR que o resto do
              registro corrente  no  buffer  de  entrada  do  fluxo  deve  ser
              descartado.   Esta  rotina  retorna  'um' se for bem-sucedida, e
              'zero' em caso contrário.

       xdr_reference(xdrs, pp, size, proc)
       XDR *xdrs;
       char **pp;
       u_int size;
       xdrproc_t proc;

              Uma primitiva que fornece  perseguição  a  ponteiros  dentro  de
              estruturas.   O  parâmetro pp é o endereço do ponteiro; size é a
              estrutura  sizeof  para  o  qual  *pp  aponta;  e  proc   é   um
              procedimento  XDR que filtra a estrutura entre sua forma C e sua
              representação externa.  Esta rotina retorna  'um'  se  for  bem-
              sucedida, e 'zero' em caso contrário.

              Atenção:  esta  rotina  não entende ponteiros do tipo NULL.  Use
              xdr_pointer() no lugar.

       xdr_setpos(xdrs, pos)
       XDR *xdrs;
       u_int pos;

              Uma macro que invoca a rotina de posição setada associada com  o
              fluxo XDR xdrs.  O parâmetro pos é um valor de posição obtido de
              xdr_getpos().  Esta rotina retorna 'um' se o fluxo XDR não  pode
              ser reposicionado, e 'zero' em caso contrário.

              Atenção:  é  difícil  reposicionar  alguns tipos de fluxos XDR ,
              assim esta rotina pode falhar com um tipo de fluxo  e  funcionar
              com outro.

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

              Uma  primitiva de filtro que traduz entre inteiros curtos do C e
              suas representações externas.  Esta rotina retorna 'um'  se  for
              bem-sucedida, e 'zero' e caso contrário.

       void
       xdrstdio_create(xdrs, file, op)
       XDR *xdrs;
       FILE *file;
       enum xdr_op op;

              Esta  rotina inicializa o objeto de fluxo XDR apontado por xdrs.
              Os dados do fluxo XDR são escritos ou lidos do arquivo de  fluxo
              padrão  de I/O.  O parâmetro op determina a direção do fluxo XDR
              ( XDR_ENCODE, XDR_DECODE, ou XDR_FREE).

              Atenção: a rotina de destruição associada com  tais  rotinas  de
              chamada  de  fluxo  XDR  fflush() sobre o fluxo de arquivo , mas
              nunca fclose().

       xdr_string(xdrs, sp, maxsize)
       XDR
       *xdrs;
       char **sp;
       u_int maxsize;

              Uma primitiva de filtro  que  traduz  entre  strings  C  e  suas
              representações  externas  correspondentes. Strings não podem ser
              maiores que maxsize.  Nota: sp  é  o  endereço  do  ponteiro  da
              string. Esta rotina retorna 'um' se for bem-sucedida, e

       xdr_u_char(xdrs, ucp)
       XDR *xdrs;
       unsigned char *ucp;

              Uma  primitiva de filtro que traduz entre caracteres C sem sinal
              e suas representações externas.  Esta rotina retorna 'um' se for
              bem-sucedida, e 'zero' em caso contrário.

       xdr_u_int(xdrs, up)
       XDR *xdrs;
       unsigned *up;

              Uma primitiva de filtro que traduz entre inteiros sem sinal do C
              e suas representações externas.  Esta rotina retorna 'um' se for
              bem-sucedida, e 'zero' em caso contrário.

       xdr_u_long(xdrs, ulp)
       XDR *xdrs;
       unsigned long *ulp;

              Uma  primitiva  de  filtro  que traduz entre inteiros longos sem
              sinal do C e suas representações externas.  Esta rotina  retorna
              'um' se for bem-sucedida, e 'zero' em caso contrário.

       xdr_u_short(xdrs, usp)
       XDR *xdrs;
       unsigned short *usp;

              Uma  primitiva  de  filtro  que traduz entre inteiros curtos sem
              sinal do C e suas representações externas.  Esta rotina  retorna
              'um' se for bem-sucedida, e 'zero' em caso contrário.

       xdr_union(xdrs, dscmp, unp, choices, dfault)
       XDR *xdrs;
       int *dscmp;
       char *unp;
       struct xdr_discrim *choices;
       bool_t (*defaultarm) ();  /* may equal NULL */

              Uma  primitiva de filtro que traduz entre uma union discriminada
              do C e sua representação externa  correspondente.  Ela  primeiro
              traduz  o  discriminante  da  união  localizado  em dscmp.  Este
              discriminante é sempre um enum_t.  A seguir, a união  localizada
              em  unp  é traduzida. O parâmetro choices é um ponteiro para uma
              matriz de estruturas xdr_discrim().  Cada  estrutura  contém  um
              par  ordenado  de  [value,proc].   Se o discriminante da união é
              igual ao valor associado, então proc é chamado para  traduzir  a
              união. O fim da matriz de estrutura xdr_discrim() é denotada por
              uma rotina de valor NULL.  Se o discriminante não  é  encontrado
              na  matriz  choices  , então o procedimento defaultarm é chamado
              (se ele não for NULL).  Retorna  'um'  se  for  bem-sucedida,  e
              'zero' em caso contrário.

       xdr_vector(xdrs, arrp, size, elsize, elproc)
       XDR *xdrs;
       char *arrp;
       u_int size, elsize;
       xdrproc_t elproc;

              Uma primitiva de filtro que traduz entre matrizes de comprimento
              fixo e suas representações externas correspondentes. O parâmetro
              arrp  é  o endereço do ponteiro para a matriz, enquanto size é o
              elemento 'count' da matriz. O parâmetro elsize  é  o  sizeof  de
              cada  um  dos  elementos da matriz, e elproc é um filtro XDR que
              traduz entre o formato dos elementos  da  matriz  em  C  e  suas
              representações  externas.   Esta rotina retorna 'um' se for bem-
              sucedida, e 'zero' em caso contrário.

       xdr_void()

              Esta rotina sempre retorna 'um'.   Ela  pode  ser  passada  para
              rotinas  RPC  que requerem um parâmetro de função, onde nada vai
              ser feito.

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

              Uma primitiva que chama  xdr_string(xdrs,  sp,MAXUN.UNSIGNED  );
              onde  MAXUN.UNSIGNED  é  o valor máximo de um inteiro sem sinal.
              xdr_wrapstring() está à mão porque o pacote RPC passa um  máximo
              de  duas  rotinas  XDR  como parâmetros, e xdr_string(), uma das
              primitivas mais frequentemente  usadas,  requer  três.   Retorna
              'um' se for bem-sucedida, e 'zero' em caso contrário.

VEJA TAMBÉM

       rpc(3N)

       Os seguintes manuais:
              eXternal   Data   Representation   Standard:   Especificao  do
              Protocolo
              eXternal Data Representation: Notas Tcnicas da Sun
              XDR: Padro de Representao  Externa  de  Dados,  RFC1014,  Sun
              Microsystems, Inc., USC-ISI.

TRADUÇÃO PARA A LÍNGUA PORTUGUESA

       RUBENS  DE  JESUS  NOGUEIRA  <darkseid99@usa.net>  (tradução) XXXXXX XX
       XXXXX XXXXXXXX <xxxxxxxxxx@xxx.xxx> (revisão)

                            16 de fevereiro de 1988                     XDR(3)