Pliki włączane |
<rpc/rpc.h> |
Rozdział podręcznika |
3N | |
Prototyp |
void clnt_destroy(CLIENT *clnt); | |||
Zwracana |
Sukces |
Niepowodzenie |
Czy zmienia errno | |
wartość |
Ł ^ % V - |
Nie |
Teraz możemy rozpocząć redagowanie programu f act_client. c oraz dodawanie odpowiedniego kodu do funkcji main pierwotnego przykładu fact. c. Zmodyfikowany program fact client. c pokazano na ilustracji 9.22. Zmieniło się wywołanie funkcji calc_fact w funkcji factorial_l.
* Ten kod został wygenerowany przez rpcgen.
* To tylko szablon, którego można używać jako
* wzorca dla własnych funkcji.
Clude "fact.h" lUde' <unistd. h>..
long int
factorial_l(int calc_fac_l_arg,
char
/*
....... ^
*host)
dodai.e ze względu r.a exit , teraz zwraca long, a nie void*/
/* TO SAMO CO WCZEŚNIEJ */
........
return *result 1;
main (int argc, char *argv[ n ( char *$Óst; ‘
/*.: ..... ^...........- >.. .
Tu można dodać własne deklaracje
łonij1 int % f_ńua(b? int number;
if (argc < 2) {
printf("Składnia: %s host_serwera\n", argv[0]);
exit(1);
) host = argv[l];
^ * ... \ ...: .
* .Ten kod pochodzi.z fopkcji main programu fact.c
printf ("Program do wyliczania silni\n");
- , printf ("Wpisz dodatnia liczbę całkowitą");
scanJ: (" %d" , Łnumbor); lf (nunter < 0)
m
- printfJa' nalegam, liczbę dodatnią!\n"); else if l(f numb - factorial 1(number, host)) > 0)
f* wygenerowanovsilnię
printf ("%d! %d\n", numbei, 1 numb);
• else -■■
printf(*Pzzcpzaszam, ale *d! to dla mnj^ za du7o!\n"
number);
Szablon serwera wygenerowany przez rpcgen pokazano na ilustracji 9.23.
/*
* Ten kod został wygenerowany przez rpcgen.
* To tylko szablon, którego można używać jako
* wzorca dla własnych funkcji.
*/
łinclude " fact. h'' long int *
calc_fac_l_svc(int *argp, struct svc_req * rqstp) {
Static long int result;
/*
* * tu można wstawić kod serwera */
long int total = 1, last «! 0;
int idx;
for <idx = *argp; idx - 1; -idx) { total *= idx;
if (total <“ last) ( /* Czy przekroczony zakres? */
result « 0; return (sresult);
1
last = total
result - total; return (sresult);
Podobnie jak w przypadku szablonu klienta, możemy teraz zmienić szablon serwera, włączając kod zdalnej procedury. Zmieniony plik f act_server. c pokazano na ilustracji 9.24.
/*
* Ten kod został wygenerowany przez rpcgen.
* To tylko szablon, którego można używać jako
* wzorca dla własnych funkcji.
*/
273