Descripcin XDR const MAXUSERNAME32 const MAXFILELEN65535 const MAXNAMELEN255

  • Slides: 6
Download presentation
/* Descripción XDR */ const MAXUSERNAME=32; const MAXFILELEN=65535; const MAXNAMELEN=255; enum filekind { TEXT=0,

/* Descripción XDR */ const MAXUSERNAME=32; const MAXFILELEN=65535; const MAXNAMELEN=255; enum filekind { TEXT=0, DATA=1, EXEC=2 }; union filetype switch (filekind) { case TEXT: void; case DATA: string creator<MAXNAMELEN>; case EXEC: string interpretor<MAXNAMELEN>; }; struct file { string filename<MAXNAMELEN>; filetype; string owner<MAXUSERNAME>; opaque data <MAXFILELEN>; }; file. XDR. x

file. XDR. h #include <rpc/types. h> #define MAXUSERNAME 32 #define MAXFILELEN 65535 #define MAXNAMELEN

file. XDR. h #include <rpc/types. h> #define MAXUSERNAME 32 #define MAXFILELEN 65535 #define MAXNAMELEN 255 struct filetype { filekind; union { char *creator; char *interpretor; } filetype_u; }; typedef struct filetype; bool_t xdr_filetype(); enum filekind { struct file { TEXT = 0, char *filename; DATA = 1, filetype; EXEC = 2, char *owner; }; struct { typedef enum filekind; u_int data_len; bool_t xdr_filekind(); char *data_val; } data; }; typedef struct file; bool_t xdr_file();

file. XDR_xdr. c (I) #include <rpc/rpc. h> #include "file. XDR. h" bool_t xdr_filekind(xdrs, objp)

file. XDR_xdr. c (I) #include <rpc/rpc. h> #include "file. XDR. h" bool_t xdr_filekind(xdrs, objp) XDR *xdrs; filekind *objp; { if (!xdr_enum(xdrs, (enum_t *)objp)) { return (FALSE); } return (TRUE); }

bool_t xdr_filetype(xdrs, objp) XDR *xdrs; filetype *objp; { if (!xdr_filekind(xdrs, &objp->kind)) { return (FALSE);

bool_t xdr_filetype(xdrs, objp) XDR *xdrs; filetype *objp; { if (!xdr_filekind(xdrs, &objp->kind)) { return (FALSE); } switch (objp->kind) { case TEXT: break; case DATA: if (!xdr_string(xdrs, &objp->filetype_u. creator, MAXNAMELEN)) { return (FALSE); } break; case EXEC: if (!xdr_string(xdrs, &objp->filetype_u. interpretor, MAXNAMELEN)){ return (FALSE); } break; default: return (FALSE); } return (TRUE); } file. XDR_xdr. c (II)

file. XDR_xdr. c (III) bool_t xdr_file(xdrs, objp) XDR *xdrs; file *objp; { if (!xdr_string(xdrs,

file. XDR_xdr. c (III) bool_t xdr_file(xdrs, objp) XDR *xdrs; file *objp; { if (!xdr_string(xdrs, &objp->filename, MAXNAMELEN)) { return (FALSE); } if (!xdr_filetype(xdrs, &objp->type)) { return (FALSE); } if (!xdr_string(xdrs, &objp->owner, MAXUSERNAME)) { return (FALSE); } if (!xdr_bytes(xdrs, (char **)&objp->data_val, (u_int *)&objp->data_len, MAXFILELEN)) { return (FALSE); } return (TRUE); }

Escribir. c #include <stdio. h> #include <rpc/rpc. h> #include "file. XDR. h" int main()

Escribir. c #include <stdio. h> #include <rpc/rpc. h> #include "file. XDR. h" int main() { XDR xdr_handle; FILE *fp; file fichero; char data[5]; data[0]='a'; data[1]='b'; data[2]='c'; data[3]='d'; data[4]='e'; if((fp=fopen("salida", "w"))!=NULL) { xdrstdio_create(&xdr_handle, fp, XDR_ENCODE); fichero. filename="nombrefichero"; fichero. type. kind=TEXT; fichero. owner="nombrepropietario"; fichero. data_len=5; fichero. data_val=data; xdr_file(&xdr_handle, &fichero); xdr_destroy(&xdr_handle); fclose(fp); } }