Я хочу написать серверную/клиентскую программу, используя RPC, которая передает структуру от клиента (содержащую некоторые строки) на сервер. Эта структура должна быть сохранена на сервере с использованием связанного списка. На данный момент у меня есть следующий код:
.x-файл:
struct paper_node
{
long id;
string author<>;
struct paper_node *next;
};
struct add_in
{
string author<>;
};
typedef struct paper_node *list_node;
сервер
add_out *add_proc_1_svc(add_in *in, struct svc_req *rqstp)
{
static add_out out;
static long id = 1;
static paper_node *list = NULL;
//paper_node *p, *q;
paper_node *pointer, *new_paper;
new_paper = (paper_node *) malloc(sizeof(paper_node));
new_paper->id = id;
new_paper->author = in->author;
new_paper->next = NULL;
if (list == NULL)
{
list = new_paper;
}
else
{
for (pointer = list; pointer->next != NULL; pointer = pointer->next);
pointer->next = new_paper;
}
printf("%ld - %s\n", list->id, (char *)list->author);
out = id;
id += 1;
return(&out);
}
клиент
void handle_new_paper(char **argv, CLIENT *cl)
{
add_in in;
add_out *out;
buffer = read_new_paper(argv);
in.author = argv[3];
out = add_proc_1(&in, cl);
if (out == NULL) { printf("Error: %s\n", clnt_sperror(cl, argv[1])); }
else
{
printf("%ld\n", *out);
}
free(buffer);
}
Сервер, похоже, неправильно добавляет строки в список. При печати идентификатора списка (заголовок списка) он каждый раз печатает «1», но он просто печатает строковые значения, которые были переданы серверной функции при текущем вызове (а не строковые значения первый пункт в списке).
Кто-нибудь знает, где это идет не так?