16

16



Komunikacja między procesami w Unixie

łinclude "fact.h" long int    *

calc_fac__l_svc (int *argp, struct svc_req static long int result;

/*

* * tu można wstawić kod serwera */

'4long int-    total - 1, last = 0;

int    idx;

for (idx & *argp; idx -.1; '~-idx) { total -t- idx; if (total    last)

_ result -,0; return (&resałt);    '

■ aasfc.\® total;    r    ^

* - &    * y: ^ :

result -total; return ((result);


* rqstp)



’zy i r r.ok*

:Ks|§fo


7


y’zakres? */


Plik makefile wygenerowany przez rpcgen umieszczono na ilustracji 9.25

Ilustracja 9.25. Plik makeflle.fact wygenerowany przez rpcgen

#    To jest szablonowy plik makefile wygenerowany przez rpcgen

#    Parametry

CLIENT * fact_client SERVER = fact__server

SOURCESCLNT.c =

SOURCESCLNT.h =

SOURCES_SVC.C =

SOURCES~SVC.h =

SOORCES.x * fact.x

TARGETS_3VC.c = fact_svc.c fact_server.c TARGETS__CLNT. c = fact_clnt.c fact_client.c

TARGETS * fact.h fact^clnt-c fact_svc.c fact_client.c fact_server.c

OBJECTSCLNT « $(SOURCESJTLNT.c:%.C«%.o) $(TARGETS_CLNT.c:%.c=%.o) OBJECTS__SVC = $(SOURCES_SVC.c:%.c=%.o) $ (TARGETS_SVC.c:%.c=%.o)

#    Opcje kompilatora


ĆFLAGS +« -g    ‘ -

LDLIBS +*“ -Insi RPCGENFLAGS = -C

#    Pliki docelowe

all : $(CLIENT) $<SERVER)

$(TARGETS) : $(SOURCES.x)

rpcgen $(RPCGENFLAGS) $(SOURCES.x)

$(OBJECTS_CLNT) : $(SOURCESCLNT.c) $(SOURCES_CLNT.h) $(TARGETS_CLNT.c) $(OBJECTS_SVC) : $(SOURCES_SVC.c) $(SOURCES_SVC.h) $(TARGETS_SVC.c)

$(CLIENT) : $(OBJECTS_CLNT)

$(LINK.c) -O $(CLIENT) $(OBJECTS_CLNT) $(LDLIBS)

$(SERVER) : $(OBJECTS_SVC)

$(LINK.c) -O $(SERVER) $(OBJECTS_SVC) $(LDLIBS)

clean:

$ (RM) core $(TARGETS) $(OBJECTS_CLNT) $(OBJECTS_SVC) $(CLIENT) $(SERVER)

Pliku makefile można używać w postaci prawie nie zmienionej, jednak o zmianę aż proszą się opcje kompilatora. Można na przykład do RPCGENFLAGS dodać znacznik -C albo nakazać konsolidowanie biblioteki matematycznej, uzupełniając LDLIBS znacznikiem -lm. Jeżeli ma zostać użyty kompilator inny niż domyślny (w większości systemów jest nim cc), informację tę należy zamieścić w sekcji CC (na przykład CC=gcc w przypadku kompilatora GNU lub CC=cc w przypadku C++ firmy Sun). Program make zakłada, że skrypt opisujący zlecone mu zadania znajduje się w pliku o nazwie makefile. Ponieważ rpcgen tworzy skrypt zapisany w pliku o nazwie złożonej ze słowa makefile, kropki i nazwy pliku definicji protokołu (w naszym wypadku fact), użytkownik ma do dyspozycji dwie możliwości. Pierwsza: zmienić nazwę generowanego pliku na ma ke f i -le za pomocą polecenia mv. Druga: skorzystać z opcji -f polecenia make. Opcję tę należy uzupełnić nazwą, jaką ma otrzymać utworzony plik skryptu.

Rysunek 9.26 przedstawia sekwencję zdarzeń uzyskaną na skutek zastosowania w systemie autora polecenia make z opcją -f.

Ilustracja 9.26. Korzystanie z pliku makefile .fact

% make -f makefile.fact

cc -g -c fact_clnt.c -o fact_clnt.o

cc -g -c fact_client.c -o fact_cłient.o

cc -g o fact_client fact_clnt.o fact_client.o -Insi

cc -g -c fact__svc.c -o fact_svc.o

"fact_svc.c" . linę 70: warning: rlim_t assigned to int

"fact_svc.c", linę 55: warning:    sig not used

"fact_svc.c", linę 195: warning:    rlim_t assigned to int

"fact svc.c", linę 32: warning: : :_rpcpmstart defined but not used

cc -g -c fact_server.c -o fact_server.o

"fact_server.c", linę 10: warning: rqstp not used

cc -g -o fact_server fact_syc.o fact_server.o -Insi

Na ilustracji 9.27 pokazano sekwencję umożliwiającą uruchomienie aplikacji klient-serwer wyznaczającej silnię.

Ilustracja 9.27. Wynik działania programu klient-serwer wyliczającego silnię

mcrpheus % fact_server

morpheus %

ps -ef

1 grep

gray

gray

283

273 56

03:11:07

term/2

0:02

-csh

gray

2685

283 37

11:02:33

term/2

0:00

ps -ef

gray

2686

283 5

11:02:33

term/2

0:00

grep gray

gray

2680

1 31

11:00:30

0:00

fact_server

275


Wyszukiwarka

Podobne podstrony:
Komunikacja między procesami w Unixie_ ■    Jeżeli klient wysunie kilka identycznych
Komunikacja między procesami w Unixie powinno się używać w odniesieniu do poleceń, które nie prowadz
Komunikacja między procesami w Unixiedo naszych badań wybierzemy tylko nieliczne. Zestawienie argume
Komunikacja między procesami w Unixie i argv. W sekcji deklaracyjnej klienta rezerwowane jest miejsc
Komunikacja między procesami w Unixle łinclude "hello.h*    /* wygenerowany prze
Komunikacja między procesami w Unixie Jeżeli proces zostanie uruchomiony lokalnie, zostanie również
Komunikacja między procesami w Unixie int * print_hello_l(void *argp, CLIENT *clnt) { static int
Komunikacja między procesami w Unixie (svc_req *) Client);    Wywołać funkcję
Komunikacja między procesami w Unixie    _ rzone przez rpcgen. Plik f act_client. c t
Komunikacja między procesami w UnixieTabela 9.9. Zestawienie informacji o funkcji clnt_destroy Pli
Komunikacja między procesami w Unixie morpheus % factclient morpheus Program do wyliczania silni&nbs
Komunikacja między procesami w Unixie typedef linę *line_ptr; /* wskaźnik na "dużo miejsca"
Komunikacja między procesami w Unixie jest ustawiany na 1 (TRUE). Jeżeli bufor wynikowy został wcześ
Komunikacja między procesami w Unixie_ if (rpc_stat != RPC_SUCCESS) if (rpc_stat !- RPC_TIM£DOUT) (
image001 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeby wł
DSC00273 (6) 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeb
DSC00277 (9) 6. Uzupełnić tabelę nazwami mechanizmów komunikacji między procesami w taki sposób, żeb
1 Komunikacja między procesami w UnixleĆwiczenie 8-8 Czy wynik działania programu 8.6 pozostanie tak

więcej podobnych podstron