next up previous contents
Next: Определение протокола. Up: Удаленный вызов процедур. Previous: Передача произвольных типов данных   Contents

Разработка высокоуровневых приложений RPC.

В качестве примера высокоуровневого приложения приведен удаленный аналог команды чтения оглавления каталога.

Вначале рассматривается локальная версия. Программа состоит из двух файлов:

lls.c - основная программа, которая вызывает процедуру в локальном модуле read_dir.c

#include <stdio.h>

#include <strings.h>

#include "rls.h"

 

main (int argc, char **argv)

{

  char dir[DIR_SIZE];

  /* вызов локальной процедуры */

  strcpy(dir, argv[1]);/* char dir[DIR_SIZE] это имя каталога */

  read_dir(dir);

  /* вывод результата */

  printf("%s\n", dir);

  exit(0);

}

read_dir.c - файл локальной процедуры read_dir().

/* процедуры, совместимые с RPC принимают один входной аргумент

   и возвращают один результат. Оба передаются через указатели.

   Возвращаемые значения должны указывать на статические данные. */

#include <stdio.h>

#include <sys/types.h>

#include <sys/dir.h> 

#include "rls.h"

 

read_dir(char *dir)  /* char dir[DIR_SIZE] */

{

  DIR * dirp;

  struct direct *d;

  printf("начало");

 

  /* открывает каталог */

  dirp = opendir(dir);

  if (dirp == NULL)

  return(NULL);

 

  /* сохраняет имена файлов в буфер каталога */

  dir[0] = NULL;

  while (d = readdir(dirp))

  sprintf(dir, "%s%s\n", dir, d->d_name);

 

  /* выводит результат */

  printf("выход ");

  closedir(dirp);

  return((int)dir); 

}

заголовочный файл rls.h содержит строку

#define DIR_SIZE 8192
Понятно, что этот размер должен быть упомянут в обоих файлах. Позже, при разработке RPC-версии, к этому файлу будет добавлена другая информация.

Для того, чтобы модифицировать программу для работы через сеть, выполняются следующие действия:



Subsections

2003-12-09