next up previous contents
Next: Компиляция протоколов и низкоуровневое Up: Разработка высокоуровневых приложений RPC Previous: Серверная часть   Contents

Клиентская часть

На клиентской стороне просто производится вызов удаленной процедуры. Для этого используется функция callrpc():

int callrpc(char *host /* Имя сервера */,

   u_long prognum /* Номер программы сервера */,

   u_long versnum /* Номер версии сервера */,

   char *in /* Указатель на аргументы */,

    /* Фильтр XDR для кодирования аргумента */

   xdrproc_t inproc,

   char *out /* Адрес для сохранения результата */,

    /* Фильтр декодирования результата */

   xdr_proc_t outproc);

Локально вызывается функция read_dir(), которая использует
callrpc() для вызова удаленной процедуры, зарегистрированной на сервере как READDIR.

Программа 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);

}



2004-06-22