В качестве примера высокоуровневого приложения приведен удаленный аналог команды чтения оглавления каталога.
Вначале рассматривается локальная версия. Программа состоит из двух файлов.
Файл lls.c содержит основную программу, которая вызывает процедуру в локальном модуле read_dir.c:
#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);
}
аргумент и возвращают один результат. Оба передаются
через указатели. Возвращаемые значения должны
указывать на статические данные. */
#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);
}
#define DIR_SIZE 8192
.
Понятно, что этот размер должен быть упомянут в обоих файлах. Позже, при разработке RPC-версии, к этому файлу будет добавлена другая информация.
Для того, чтобы модифицировать программу для работы через сеть, выполняются следующие действия: