Perhaps you are not closing the xdr stream correctly?
I wrote two simple test programs. One writes a file, the other reads it. Seems to work fine for me. Maybe these will help.
xdr_write.c:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <rpc/xdr.h>
int main()
{
char * name = "Hello, World";
FILE * file;
XDR xdrs;
if (NULL == (file = fopen("xdr-data.bin", "wb")))
{
fprintf (stderr, "fopen failed %d\n", errno);
exit (2);
}
xdrstdio_create(&xdrs, file, XDR_ENCODE);
if (0 == xdr_string(&xdrs, &name, _POSIX_NAME_MAX))
{
fprintf (stderr, "xdr_string failed\n");
exit (2);
}
xdr_destroy(&xdrs);
fclose(file);
return 0;
}
xdr_read.c:
Code:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <rpc/xdr.h>
int main()
{
char buffer[_POSIX_NAME_MAX+1];
char * name = buffer;
FILE * file;
XDR xdrs;
if (NULL == (file = fopen("xdr-data.bin", "rb")))
{
fprintf (stderr, "fopen failed %d\n", errno);
exit (2);
}
xdrstdio_create(&xdrs, file, XDR_DECODE);
*name = '\0';
if (0 == xdr_string(&xdrs, &name, _POSIX_NAME_MAX))
{
fprintf (stderr, "xdr_string failed\n");
exit (2);
}
printf("Read back = \"%s\"\n", name);
xdr_destroy(&xdrs);
fclose(file);
return 0;
}
Bookmarks