На клиентской стороне просто производится вызов удаленной процедуры. Для этого используется функция callrpc():
u_long prognum /* Номер программы сервера */,
u_long versnum /* Номер версии сервера */,
char *in /* Указатель на аргументы */,
xdrproc_t inproc /* Фильтр XDR для кодирования аргумента */,
char *out /* Адрес для сохранения результата */
xdr_proc_t outproc /* Фильтр декодирования результата */);
Программа rls.c выглядит так:
* rls.c: клиент удаленного чтения каталога
*/
#include <stdio.h>
#include <strings.h>
#include <rpc/rpc.h>
#include "rls.h"
main (argc, argv)
int argc; char *argv[];
{
char dir[DIR_SIZE];
/* вызов удаленной процедуры */
strcpy(dir, argv[2]);
read_dir(argv[1], dir); /* read_dir(host, directory) */
/* вывод результата */
printf("%s\n", dir);
exit(0);
}
read_dir(host, dir)
char *dir, *host;
{
extern bool_t xdr_dir();
enum clnt_stat clnt_stat;
clnt_stat = callrpc ( host, DIRPROG, DIRVERS, READDIR,
xdr_dir, dir, xdr_dir, dir);
if (clnt_stat != 0) clnt_perrno (clnt_stat);
}