2016-01-18 3 views
-1

Я хочу создать приложение RPC для Linux с помощью rpcgen. Это сортировка пузыря. Я использовал этот учебник: CLICK HEREC-RPC on linux (Bubble sort)

Это мой код:

#include <stdio.h> 

void bubbleSort(int numbers[], int array_size) 
{ 

int i, j, temp; 

for (i =0; i <array_size; i++) 
{ 
    for (j =0; j<array_size-1; j++) 
    { 
     if (numbers[j] > numbers[j+1]) { 
      temp = numbers[j]; 
      numbers[j] = numbers[j+1]; 
      numbers[j+1] = temp; 
     } 
    } 
} 
} 

int main(void) 
{ 
int array[10000]; 
int i; 

for(i=10000;i!=0;i--) 
{ 
    array[i-1]=i; 
} 
bubbleSort(array,10000); 
for(i=0;i<10000;i++) 
{ 
    printf("%d\n",array[i]); 
} 
return 0; 
} 

И мой вопрос, что я должен поместить в «file_name.x» и «file_name_client.c» и «file_name_server.c», что это будет работать.

Благодарим за отзыв каждого наконечника.

+1

'' file_name.x "и" file_name_client.c "и" file_name_server.c "' ??? что это такое? –

+1

Добро пожаловать в переполнение стека! , Сначала прочитайте страницу [Ask]. –

+0

Кстати, знаете ли вы, что было бы довольно глупо, потому что крайне неэффективно? И вы имеете в виду RPC/XDR или ONC/RPC, а не только RPC! –

ответ

1

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

IDL-код для bubblesort.x:

typedef int sortarray<>; 

program BUBBLESORT { 
    version MESSAGEVERS { 
     sortarray doBubbleSort(sortarray) = 1; 
    } = 1; 
} = 31337; 

Вы, конечно, не может сортировать он на месте, поэтому вам нужно вернуть сортировку, чтобы результат передавался по сети.

Теперь скомпилировать его с rpcgen bubble.x

Поскольку C не знает родные массивы переменной длины, тип sortarray будет расширяться:

typedef struct { 
    u_int sortarray_len; 
    int *sortarray_val; 
} sortarray; 

и прототип функции для службы:

extern sortarray * dobubblesort_1_svc(sortarray *, struct svc_req *); 

Теперь реализуем функцию dobubblesort_1_svc, которая должна сортировать массив в sortarray, используя вашу функцию сортировки, а затем возвращая результат массив (при сортировке на месте, вы можете также непосредственно возвращать первый аргумент dobubblesort_1_svc)

Комментарий:

SunRPC архаична и боль, однако. Вы должны действительно использовать современные RPC-механизмы, когда это возможно (SOAP. XMLRPC, ORB, что угодно)

+0

* От OP *: «Слишком много ошибок. Можете ли вы отправить:« bubblesort_client.c »и« bubblesort_server.c »CODE после компиляции« bubblesort.x »? Потому что когда я сделал:« make -f Makefile.bubblesort »тоже много ошибок ». * Мой ответ *: Извините, я дал вам кикстарт, но я не буду полностью писать ваш код. Постарайтесь как можно лучше, если у вас все еще есть ошибки, добавьте свой вопрос, включая эти. – Ctx