|
��������
rpcgen ���������� ��������� RPC
���������
rpcgen ��_���� rpcgen -h [-o ���_����] [��_����] rpcgen -c [-o ���_����] [��_����] rpcgen -m [-o ���_����] [��_����] rpcgen -l [-o ���_����] [��_����] rpcgen [-s ���������]* [-o ���_����] [��_����]
��������
Rpcgen �������� ��������� �������� ��-���������, �����������
�������� RPC. �� ���� ����������� ��������� ���� �� ����� RPCL
(���� ��������� ����������� �������). ��� �������, ���������� ��
������ ����� �� ����� (������ �������) ���������� ������ ��������
�����. ���� ������� ���� ����� ��� proto.x, ������������ �����
��������� ��������� �������: proto.h - ���� ����������,
proto_xdr.c - ��������� XDR, proto_svc.c - �������, ������� ��������� � �������, � proto_clnt.c - � ��������.
��� ��������� �������� ������ ����������� ������� � ��������� ������ ������ ��������� �����. � ������������ ������� �� ��������� �� �������� ����.
��� �������� ����� ����� �������������� rpcgen �������� ��������� ��-�������������� cpp(CP), ������� ��������� cpp �� ������� ����� rpcgen ���������. ������� ���� ��������� ����� ������������� ����������� ������ cpp: RPC_HDR, RPC_XDR, RPC_SVC � RPC_CLNT.
Rpcgen, ����� ����, ��� ��������� ��������� ��������������� ��������� ������� ������. ����� ������, ������������� �������� "%", ���������� ����� � �������� ����, ��� �������������.
��������� XDR-��������� ����� �����������, �� ��������� ��
���. ��� ���� rpcgen ����� ������������ ������������� ��������� �
������, ��������� �� ����� �������������� ��������� � ���������
xdr_.
������������ ����������� ���, ������ ��� ���������� � ������������� ������� rpcgen, ��������� �����, ����������� RPC � XDR, �
"����������� ������������ SCO NFS".
�����
-c | ���������� �������� XDR. |
---|---|
-h | ���������� ����������� ������ �� �� (���� ����������). |
-o ���_���� | �������� ����� ��������� �����. �� ��������� ������������ ���� ������������ ������ (������ ��� ������� -c, -h, -s). |
-l | ��������� ��������, ������� ��������� � �������. |
-s ��������� | ��������� ��������, ������� ��������� � �������, � �������������� ���������� ������������� ���������. �������������� ���� ������������� ���������: udp � tcp. ��� ������������� ���������� ���������� ����� ���������� ��������� ���. |
-m | ��������� ��������, ������� ��������� � �������, ��� �������� ��������� main(). ������������ � ��� ������, ���� ������������ ������� ���� ����������� ��������� main(). |
�������������
������� �������� ���������� RPCL
������������ ���� ������
[unsigned] char [unsigned] short [unsigned] int [unsigned] long unsigned float double void bool���� �� ������� ���� bool (������ ������), �� ���� ��������� RPCL ������� ��.
� �������� ����� ���������� rpcgen ����������� �����������
bool � ����������� int (������ ������, � ����������� bool_t, ������� ��������� #define ������� ��� int). ����� ����, ��� void
����� ��������� ������ � ������������ union � program. ��� �����
� ���������� unsigned ��������� ������������� ������������ uchar,
ushort, uint � ulong.
�����������
� RPCL ��������� ������ ��� ���� �����������:
���_���� �������������_�������������:
long a;
���_���� *�������������_�������������:
char *b;
���_���� �������������_�������[������]("������" ����� ���� ����� ��� ���������� ����������)
opaque c[10];�� ��������� � ��, ����������� � ����� RPCL ����� ��� �����������, ��� ����������� �����. ����������� �������� ������������� �������� ����������� �������� ��� ��������� ���������� (���� �� ����� ���������� � ������� ��������� typedef). ��� ����������:
opaque �������������_�������[������]� ������������ � ���������� ����� ������ ������ ���������� ������� (� ������). �������� �������� �� ��, ��� ������ � ������ �� ����� ������� � ��������, ��������� ������� � XDR ����������� � 32 ����� ������. ����������� ���� opaque ������������� � �������� ����� ���������� � �������� �������� ��������.
string �������������_�������[������������_������]���� ������������ ������ �� ������, ����� ������ ����������� �� ��������������. ��������� ����������� ������������� �:
char *�������������_�������
���������� ����� �������� �������� ����:
��������_����: typedef ������������_���-def ���������-def ������_����������_�����-def �����������_�����������-def ���������-def
������ ��� ����� ������ �� ����� ����� � ��. ������ � ��� � �� ����������� ���������� �������� �������� �������� ���������� �����, � XDR-����������� ���������� �� ������ �� ��������������� ������� � ��.
����������� �������� ����� � XDR �� �����������. ��������, ��������� ������ ��� rpcgen ����� ���������:
struct dontdoit { struct ididit { int oops; } sorry; enum ididitagain { OOPS, WHOOPS } iapologize; };
�������� typedef � XDR �������� ��������� �������: typedef:
typedef ���_���� �������������_������� ;"������������� �������" �������� ������ ������ ����, � �� ����� ��� "���_����" ��������� � ��������� ����. ��������:
typedef longa;
��������� �������� ������������� ����:
������������_���-def: enum �������������_���� { ������_����� }; ������_�����: ����������_������������� [=������������] ����������_������������� [=������������], ������_����� (� ������ ����� ���������, ����� ����� ��������� ����� �����- �������� ����� ��� ���������� ���������)���� ������ ������������ ���, ������ ����� ��������� �������� ����������� �������� ������������, ����������� �� 1. ������ ������� �� ��������� ����� ������� ��������. ���������:
���������-def: struct �������������_��������� { ������_�������� }; ������_��������: ��������; ��������; ������_��������������� ���������� �����:
������_����������_�����-def: array �������������_������� { unsigned �������������_����� ; ���������_����������� ; };�������� ������� ���������� ����� ������ �� �������� ���������. ������:
array mp_int { unsigned len; short val[MAX_MP_LENGTH]; };��� ������ ������������� ������������ �:
struct mp_int { unsigned len; short *val; }; typedef struct mp_int mp_int;����������� �����������:
�����������_�����������-def: union �������������_����������� switch (��������_�������������) { ������_������� [default: ��������;] }; ������_�������: case �������������_������ : ��������; case �������������_������ : ��������; ������_������� ��������_�������������: ��������
�������� ����������� ������ �� ����������� ��-����������� � ��-��������������. ������:
union net_object switch (net_kind kind) { case MACHINE: struct sockaddr_in sin; case USER: int uid; default: string whatisit; };��� ������ ������������� ������������ �:
struct net_object { net_kind kind; union { struct sockaddr_in sin; int uid; char *whatisit; } net_object; }; typedef struct net_object net_object;
�������� �������� �� ��, ��� ��� ������������ ���������� � �������� ��������� ��������� � ������ ������ ����. �������� ��������:
���������-def: program �������������_��������� { ������_������ }=�����_���������; ������_������: ������ ������ ������_������ ������: version �������������_������ { ������_�������� }=�����_������; ������_��������: ��������_��������� ��������_��������� ������_�������� ��������_���������: ���_���� �������������_���������(���_����)=�����_���������;
�������� �������� �� ������ �� �� ��� �� ����� ��������� ����, ������� ��� ������ ������ �� ��������, ��� ���������� � �������. �����������, ��� ��� ����� ������� �������� (���������) ��������� ��� ��������� ����. ��� �������� ����� ��������� ��������� �������:
program DATE_PROG { version DATE_VERS { date DATE_GET(timezone) = 1; void DATE_SET(date) = 2; /* ����� �� �������� */ } = 1; } = 100;� ����� ���������� ��� ������ ����� ����� ��������� ���:
#define DATE_PROG 100 #define DATE_VERS 1 #define DATE_GET 1 #define DATE_SET 2
���� �� ����������� rpcgen ��� ���������� ��������� ��������, ��� ���������� ������������ � ���������� ������� ���������. ������ ��������������� � ������ ���������� ����������� ����� ��-�������, ��� ������� ��������� � ������ � �������� ���������, �� ������������ ��������� ������� � ������������ ������� ������.
���������� ��������� ��������� ���������� DATE_GET:
date * /* ������ ���������� ��������� �� ���������� */ date_get_l(tz) timezone *tz; /* ������ �������� ��������� �� ��������� */ { static date d; /* ������ ���� �����������! */ /* * ��������� ���� * � ���������� �� � d */ return(&d); }
��� ��������� ��������� � ������, ����������� � #define, ��
������������ ��������� ������� � ������������ ������� ������. XDR
���������� ����������� �������� ����� ��������� ����������� ��
��������� ���������, ������� ��� ����������� ��� ���������� ��
��������� ������� ����������� ����� �����������. ��� ���� XDR ��
������������ ������ ������������. ��� ������� ������������ �� ��
���������� �����.
����� ������ ���������� ����������
������� �������������� ��������� � make(1) ��� ����������
�������� XDR � ���������� (�� ������� ����� ���������� RPCL �����
���������� .x):
.SUFFIXES:.x .x.c: rpcgen -c $< -o $@ .x.h: rpcgen -h $< -o $@������: ���������� ��������� example, � ������� ����������� ������ ���� �����:
const NFS_PORT = 2059; enum nfsstat { NFS_OK=0 }; struct gnumbers { long g_assets; long g_liabilities; };������� rpcgen, ��������� ��� ����������, ������� ���� ���������� example.h � ���� XDR � ������ example_xdr.c.
example.h #define NFS_PORT 2059 enum nfsstat { NFS_OK = 0, }; typedef enum nfsstat nfsstat; bool_t xdr_nfsstat(); struct gnumbers { long g_assets; long g_liabilities; }; typedef struct gnumbers gnumbers; bool_t xdr_gnumbers(); example_xdr.c #include <rpc/rpc.h> #include "infile.h" bool_t xdr_nfsstat (xdrs, objp) XDR *xdrs; nfsstat *objp; { if (!xdr_enum(xdrs, (enum_t *)objp)) { return (FALSE); } return (TRUE); } bool_t xdr_numbers (xdrs, objp) XDR *xdrs; gnumbers *objp; { if (!xdr_long(xdrs, &objp->g_assets)) { return (FALSE); } if (!xdr_long(xdrs, &objp->g_liabilities)) { return (FALSE); } return (TRUE); }
��. �����
"����������� ������������ SCO NFS"
���������
� ����������� ������������ ����� ����������� ����������� �����, ��� ���� ����� �������� ���� ����� �� ����������������. �������� �������� �������� ������� ������������� ����������
��������������� ��� ��������, ������, �������� � �����.
����������� ����� �� ��������������. ����� ������������ ������ �����������, ���������� �������� ����� ����������� �� ������� ������ � ���, ����� ������������ �� ����� ������ ������ ��������.
|