Aceasta este comanda rpcgen care poate fi rulată în furnizorul de găzduire gratuit OnWorks folosind una dintre multiplele noastre stații de lucru online gratuite, cum ar fi Ubuntu Online, Fedora Online, emulator online Windows sau emulator online MAC OS
PROGRAM:
NUME
rpcgen - un compilator de protocol RPC
REZUMAT
rpcgen infile
rpcgen [-Dnume[=valoare]] [-T] [-K secunde] infile
rpcgen -c|-h|-l|-m|-M|-t [-sau outfile ] infile
rpcgen [-I] -s nettype [-sau outfile] infile
rpcgen -n netid [-sau outfile] infile
DESCRIERE
rpcgen este un instrument care generează cod C pentru a implementa un protocol RPC. Intrarea către rpcgen
este un limbaj similar cu C cunoscut sub numele de RPC Language (Remote Procedure Call Language).
rpcgen este folosit în mod normal ca în primul rezumat unde ia un fișier de intrare și
generează până la patru fișiere de ieșire. Dacă infile se numeste proto.x, Apoi rpcgen voi
generați un fișier antet în proto.h, rutine XDR în proto_xdr.c, stub-uri de pe server în
proto_svc.c, și stub-uri din partea clientului proto_clnt.c. Cu -T opțiune, va fi, de asemenea
generați tabelul de expediere RPC în proto_tbl.i. Cu -Sc opțiune, va fi, de asemenea
generați exemplu de cod care ar ilustra modul de utilizare a procedurilor de la distanță pe client
latură. Acest cod ar fi creat în proto_client.c. Cu -H.H opțiune, va fi, de asemenea
generați un exemplu de cod de server care ar ilustra cum să scrieți procedurile de la distanță.
Acest cod ar fi creat în proto_server.c.
Serverul creat poate fi pornit atât de monitoarele de porturi (de exemplu, inetd or asculta)
sau de la sine. Când este pornit de un monitor de port, creează servere numai pentru
transport pentru care descriptorul de fișier 0 a fost trecut. Numele transportului trebuie să fie
specificate prin setarea variabilei de mediu PM_TRANSPORT. Când serverul
generat de rpcgen este executat, creează mânere de server pentru toate transporturile
specificat în NETPATH variabilă de mediu sau, dacă nu este setată, creează mânere de server
pentru toate transporturile vizibile din /etc/netconfig fişier. Notă: transporturile sunt alese
în timpul rulării și nu în timpul compilării.
Când este construit pentru un monitor de port (rpcgen -I), și că serverul este pornit de la sine, acesta
fundalurile în sine în mod implicit. Un simbol definit special RPC_SVC_FG poate fi folosit pentru a rula
proces de server în prim plan.
Al doilea rezumat oferă caracteristici speciale care permit crearea mai multor
servere RPC sofisticate. Aceste caracteristici includ suport oferit de utilizator #definește si
Tabelele de expediere RPC. Intrările din tabelul de expediere RPC conțin:
· pointeri către rutina de serviciu corespunzătoare acelei proceduri,
· un pointer către argumentele de intrare și de ieșire
· dimensiunea acestor rutine
Un server poate folosi tabelul de expediere pentru a verifica autorizarea și apoi pentru a executa serviciul
rutină; o bibliotecă client o poate folosi pentru a se ocupa de detaliile managementului stocării și
Conversie de date XDR.
Celelalte trei rezumate prezentate mai sus sunt folosite atunci când nu se dorește să genereze toate
fișiere de ieșire, dar numai unul anume. Câteva exemple de utilizare a acestora sunt descrise în
EXEMPLU secțiunea de mai jos. Cand rpcgen se executa cu -s opțiunea, creează servere pentru
acea clasă specială de transporturi. Când este executat cu -n opțiunea, creează un
server pentru transportul specificat de netid. Dacă infile nu este specificat, rpcgen acceptă
intrarea standard.
Preprocesorul C, cc -E [vedea cc(1)], este rulat pe fișierul de intrare înainte de a fi efectiv
interpretat de rpcgen. Pentru fiecare tip de fișier de ieșire, rpcgen definește o specială
simbol de preprocesor pentru utilizare de către rpcgen programator:
RPC_HDR definite la compilarea în fișiere antet
RPC_XDR definite la compilarea în rutine XDR
RPC_SVC definite la compilarea în stub-uri de pe server
RPC_CLNT definite la compilarea în stub-uri la nivelul clientului
RPC_TBL definite la compilarea în tabelele de expediere RPC
Orice linie care începe cu `%' este trecut direct în fișierul de ieșire, neinterpretat de
rpcgen.
Pentru fiecare tip de date la care se face referire în infile, rpcgen presupune că există o rutină cu
șirul xdr_ înaintea numelui tipului de date. Dacă această rutină nu există în
biblioteca RPC/XDR, aceasta trebuie furnizată. Furnizarea unui tip de date nedefinit permite
personalizarea rutinelor XDR.
Sunt disponibile următoarele opțiuni:
-a Generați toate fișierele, inclusiv exemplu de cod pentru partea client și server.
-b Aceasta generează cod pentru stilul SunOS4.1 de rpc. Este pentru înapoi
compatibilitate. Aceasta este valoarea implicită.
-5 Aceasta generează cod pentru stilul SysVr4 al rpc. Este folosit de Transport
RPC independent care este în sistemele Svr4. În mod implicit, rpcgen generează cod pentru
SunOS4.1 tipul de rpc.
-c Compilați în rutine XDR.
-C Generați cod în ANSI C. Această opțiune generează și cod care ar putea fi compilat
cu compilatorul C++. Aceasta este valoarea implicită.
-k Generați cod în K&R C. Valoarea implicită este ANSI C.
-Dnume[=valoare]
Definiți un simbol nume. Echivalent cu #defini directivă în sursă. Daca nu
valoare este dată, valoare este definit ca 1. Această opțiune poate fi specificată mai mult decât
o singura data.
-h Compilați în C definiții de date (un fișier antet). -T opțiunea poate fi utilizată în
conjuncție pentru a produce un fișier antet care acceptă tabelele de expediere RPC.
-I Generați un serviciu care poate fi pornit de la inetd. Implicit este generarea unui
serviciu static care gestionează transporturile selectate cu -s. Utilizarea -I permite pornirea
un serviciu prin oricare dintre metode.
-K secunde
În mod implicit, serviciile create folosind rpcgen aștepta 120 secunde după service a
cerere înainte de a ieși. Acel interval poate fi modificat folosind -K steag. A crea
un server care se închide imediat după deservirea unei cereri, -K 0 poate fi utilizat. La
creați un server care nu iese niciodată, argumentul potrivit este -K -1.
Când monitorizați pentru un server, unii portmonitori, cum ar fi asculta(1 milioane), mereu spawn a
proces nou ca răspuns la o solicitare de serviciu. Dacă se știe că un server va fi
utilizat cu un astfel de monitor, serverul ar trebui să iasă imediat după finalizare. Pentru
astfel de servere, rpcgen ar trebui folosit cu -K -1.
-l Compilați în stub-uri la nivelul clientului.
-m Compilați în stub-uri de pe server, dar nu generați o rutină „principală”. Această opțiune
este util pentru efectuarea rutinelor de apel invers și pentru utilizatorii care trebuie să-și scrie propriile
rutina „principală” pentru a face inițializare.
-M Generați stub-uri multithread pentru a transmite argumente și rezultate între rpcgen-
codul generat și codul scris de utilizator. Această opțiune este utilă pentru utilizatorii care doresc
utilizați fire în codul lor.
-n netid
Compilați în stub-uri de pe server pentru transportul specificat de netid. Ar trebui
fi o intrare pentru netid în baza de date netconfig. Această opțiune poate fi specificată mai mult
decât o dată, astfel încât să compilați un server care deservește mai multe transporturi.
-N Utilizați stilul nou al rpcgen. Acest lucru permite procedurilor să aibă mai multe argumente. Aceasta
folosește și stilul de trecere a parametrilor care seamănă foarte mult cu C. Deci, când
trecând un argument la o procedură de la distanță, nu trebuie să treceți un pointer către
argumentul ci argumentul în sine. Acest comportament este diferit de stilul vechi al
codul rpcgen generat. Newstyle nu este cazul implicit din cauza înapoi
compatibilitate.
-o outfile
Specificați numele fișierului de ieșire. Dacă nu este specificat niciuna, se utilizează ieșirea standard
(-c, -h, -l, -m, -n, -s, -Sc, -Sm, -H.H și -t numai moduri).
-s nettype
Compilați în stub-uri de pe server pentru toate transporturile aparținând clasei
nettype. Clasele suportate sunt netpath, vizibil, circuit_n, circuit_v,
datagram_n, datagram_v, tcp și udp [vedea cpr(3N) pentru semnificațiile asociate cu
aceste clase]. Această opțiune poate fi specificată de mai multe ori. Notă: transporturile
sunt alese în timpul rulării și nu în timpul compilării.
-Sc Generați cod exemplu pentru a arăta utilizarea procedurii de la distanță și cum să vă legați la
server înainte de a apela stub-urile din partea clientului generate de rpcgen.
-Sm Generați un exemplu Makefile care poate fi folosit pentru compilarea aplicației.
-H.H Generați cod schelet pentru procedurile de la distanță pe partea serverului. Ai vrea
trebuie să completați codul real pentru procedurile de la distanță.
-t Compilați în tabelul de expediere RPC.
-T Generați codul pentru a suporta tabelele de expediere RPC.
Opțiunile -c, -h, -l, -m, -s si -t sunt folosite exclusiv pentru a genera un anumit tip
de fișier, în timp ce opțiunile -D si -T sunt globale și pot fi utilizate cu celelalte opțiuni.
NOTE
Limbajul RPC nu acceptă imbricarea structurilor. Ca soluție, structurile pot
să fie declarate la nivel superior, iar numele lor folosit în interiorul altor structuri pentru a
obține același efect.
Ciocnirile de nume pot apărea atunci când se utilizează definiții de program, deoarece domeniul aparent nu este
aplica cu adevarat. Cele mai multe dintre acestea pot fi evitate dând nume unice pentru programe, versiuni,
proceduri și tipuri.
Codul serverului generat cu -n opțiunea se referă la transportul indicat de netid si
prin urmare, este foarte specific site-ului.
EXEMPLU
Următorul exemplu:
$ rpcgen -T prot.x
generează cele cinci fișiere: prot.h, prot_clnt.c, prot_svc.c, prot_xdr.c si prot_tbl.i.
Următorul exemplu trimite definițiile de date C (fișierul antet) la ieșirea standard.
$ rpcgen -h prot.x
Pentru a trimite versiunea de testare a -DTEST, cioturi laterale server pentru toate bunurile de transport
la clasa datagram_n la ieșirea standard, utilizați:
$ rpcgen -s datagram_n -DTEST prot.x
Pentru a crea stub-urile din partea serverului pentru transportul indicat de netid tcp, utilizare:
$ rpcgen -n tcp -o prot_svc.c prot.x
Utilizați rpcgen online folosind serviciile onworks.net