RPCGEN(1)

명칭
rpcgen - RPC 프로토콜 컴파일러

서식
rpcgen infile rpcgen [-a] [-b] [-C] [ -Dname[=value]] [-i size] [-I [-K seconds]] [-L] [-M] [-N] [-T] [-Y pathname] infile rpcgen [ -c | -h | -l | -m | -t | -’ | -Ss | -Sm] [-o outfile] [infile] rpcgen [-s nettype] [-o outfile] [infile] rpcgen [-n netid] [-o outfile] [infile]

해설
rpcgen 유틸리티는, 있다 RPC 프로토콜을 실현하는 C 코드를 생성하는 툴입니다. rpcgen 에의 입력은, RPC 언어 (원격 수속 호출 언어; Remote Procedure Call Language)로서 알려진, C 언어에 유사한 언어입니다.

rpcgen 유틸리티는 통상 제 1 의 서식에서 사용되어 1 개의 입력 파일로부터 4 개의 출력 파일을 생성합니다. 입력 파일 infile 하지만 proto.x 이다고 하면(자), rpcgen (은)는 헤더 파일 proto.h, XDR routine 파일 proto_xdr.c, 서버측 그루터기 proto_svc.c, 클라이언트측 그루터기 proto_clnt.c (을)를 작성합니다. -T 옵션을 지정하면(자), 상기에 가세해 RPC 디스팟치테이불 proto_tbl.i 도 작성합니다.

rpcgen 유틸리티는 또, 특정 어플리케이션전용으로 커스터마이즈 가능한 클라이언트 및 서버의 샘플 파일도 생성할 수 있습니다. 옵션 -’, -Ss, -Sm 에 의해 각각, 샘플의 클라이언트, 서버, makefile 를 생성합니다. 옵션 -a (을)를 지정하면(자) 샘플을 포함하고 모든 파일을 생성합니다. 입력 파일 infile 하지만 proto.x 의 경우, 클라이언트측 샘플 파일은 proto_client.c 에, 서버측 샘플 파일은 proto_server.c 에, 그리고 샘플 makefile 는 makefile.proto 에 써내집니다.

생성된 서버는, 포트 모니터 (예를 들면 inetd(8) )(으)로 기동하는 일도, 그것 자신으로 기동할 수도 있습니다. 포트 모니터로부터 기동되는 경우, 파일 기술자 0 (을)를 인도하는 트랜스폴트이기 때문에만의 서버를 생성합니다. 트랜스폴트의 이름은 환경 변수 PM_TRANSPORT (을)를 세트 하는 것으로 지정하지 않으면 안됩니다. rpcgen 그리고 작성된 서버가 실행되면(자), 서버는 환경 변수 NETPATH 그리고 지정된 전트랜스폴트용으로 서버 핸들을 작성합니다. NETPATH 하지만 지정되어 있지 않은 경우는, 파일 /etc/netconfig 에 기술되고 있는 모든 가시 트랜스폴트용으로 서버 핸들을 작성합니다. 주의: 트랜스폴트는 컴파일시는 아니고 실행시에 선택됩니다. 서버가 스스로 개시하면(자), 디폴트에서는 자동적으로 백그라운드 실행으로 옮깁니다. RPC_SVC_FG (을)를 정의하는 것으로, 서버를 foreground로 실행시킬 수도 있습니다.

제2의 서식은, 더욱 세련된 RPC 서버를 생성하는 특별한 기능을 가집니다. 그 특별한 기능으로서 유저가 정의했다 #define (와)과 RPC 디스팟치테이불 의 서포트가 있습니다. RPC 디스팟치테이불의 엔트리에는 이하의 것이 있습니다:
•   그 수속에 대응하는 서비스 routine에의 포인터
•   입출력 인수에의 포인터
•   이러한 routine의 사이즈
서버는 디스팟치테이불을 이용해 인증 체크를 실시해, 그리고 서비스 routine를 실행할 수가 있습니다. 클라이언트 프로그램 라이브러리는 그것을 이용해, 기억 area 관리나 XDR 데이터 변환의 상세에 대처할 수가 있습니다.

위에 나타낸 다른 3 개의 서식은, 출력 파일의 모두가 아니고, 그 중의 특정의 것만을 생성하고 싶은 경우에 이용됩니다. rpcgen 의 사용예에 대해서는 아래의 사용예 의 섹션을 참조해 주세요. -s 옵션 첨부로 실행되면(자), rpcgen (은)는 특정의 트랜스폴트 클래스용의 서버를 생성합니다. -n 옵션 첨부로 실행되면(자), rpcgen 하 netid 그리고 지정된 트랜스폴트용 서버를 생성합니다. infile 하지만 지정되지 않는 경우, rpcgen (은)는 표준 입력으로부터 입력을 받아들입니다.

입력 파일은, 실제로 rpcgen 에 처리되기 전에, C 프리프로세서 cc -E 그리고 처리됩니다. rpcgen (은)는, 출력 파일의 각 타입마다 rpcgen 프로그래머전용의 특별한 프리프로세서 심볼을 정의합니다:

RPC_HDR
    헤더를 컴파일 할 때에 정의됩니다

RPC_XDR
    XDR routine를 컴파일 할 때에 정의됩니다

RPC_SVC
    서버측 그루터기를 컴파일 할 때에 정의됩니다

RPC_CLNT
    클라이언트측 그루터기를 컴파일 할 때에 정의됩니다

RPC_TBL
    RPC 디스팟치테이불을 컴파일 할 때에 정의됩니다

“%” 그리고 시작되는 행은 모두, rpcgen 에 해석되는 일 없이, 출력 파일에 직접 인계됩니다. C 프리프로세서의 패스명을 지정하려면 -Y 플래그를 사용해 주세요.

infile 그리고 참조되는 모든 데이터형에 대해, rpcgen (은)는, 그 데이터형명의 전에 xdr_ (을)를 부여한 이름의 routine가 존재하는 것을 가정합니다. 이 routine가 RPC/XDR 프로그램 라이브러리중에 존재하지 않는 경우는, 그것을 제공하지 않으면 안됩니다. 미정도리 데이터형을 제공하는 것으로 xdr(3) routine를 커스터마이즈 하는 것이 가능합니다.

옵션
옵션은 이하와 같습니다:

-a  샘플 파일을 포함해 모든 파일을 생성합니다.

-b  종래 호환 모드. 이전의 버젼의 OS 를 위해서(때문에), 트랜스폴트 고유의 RPC 코드를 생성합니다.

    주: FreeBSD 그럼 이 호환 플래그는 디폴트로 유효하게 되어 있습니다. FreeBSD (은)는 이전의 ONC RPC 프로그램 라이브러리만 서포트하고 있기 때문입니다.

-c  XDR routine를 컴파일 출력합니다.

-C  ANSI C 컴파일러로 사용할 수 있는 헤더 및 그루터기 파일을 생성합니다. 이 옵션으로 생성한 헤더 파일은 C++ 프로그램에서도 사용할 수 있습니다.

-Dname

-Dname=value
    심볼 name (을)를 정의합니다. 소스중의 #define 지시행과 등가입니다. value 하지만 지정되지 않는 경우, value 하 1 (이)라고 정의됩니다. 이 옵션은 여러 차례의 지정이 가능합니다.

-h  C 의 데이터 정의 (헤더 파일)를 컴파일 출력합니다. 동시에 -T 옵션을 지정하는 것으로, RPC 디스팟치테이불을 서포트하는 헤더 파일을 생성할 수 있습니다.

-i size
    인라인 코드를 생성하기 시작하는 사이즈를 지정합니다. 최적화를 실시할 때에 이용됩니다. 기본값은 5 입니다.

    주: FreeBSD 플랫폼에서의 이전의 rpcgen (와)과 호환성을 유지하기 (위해)때문에, 기본값은 실제로는 0 (즉, 디폴트에서는 인라인 코드는 생성하지 않는다)되고 있습니다. 이 기본값을 덧쓰기하려면 명시적으로 제로 이외의 값을 지정하지 않으면 안됩니다.

-I  서버측 그루터기에 있어서의 inetd(8) 서포트 코드를 생성합니다. 이와 같이 해 생성한 서버는, 단독으로 기동하는 일도, inetd (으)로부터 기동할 수도 있습니다. 단독으로 기동했을 경우, 디폴트에서는 스스로 백그라운드 동작으로 옮깁니다. 특수 심볼 RPC_SVC_FG (을)를 정의하는지, 단지 -I 옵션없이 컴파일 하면(자), 서버 프로세스는 foreground로 동작합니다.

    클라이언트로부터의 미처리 리퀘스트가 없으면, inetd 서버는 120 초 (기본값) 경과의 뒤, 종료합니다. 이 기본값은 -K 옵션에 의해 변경할 수 있습니다. inetd 서버의 전에러 메세지는 항상 syslog(3) 에 의해 로그에 남겨집니다.

-K seconds
    디폴트에서는, rpcgen (을)를 이용해 작성되어 포트 모니터로부터 기동되었다 서비스는, 리퀘스트를 처리한 앞으로 120 초 기다려 종료합니다. 이 시간은 -K 옵션을 이용해 변경할 수 있습니다. 리퀘스트 처리가 끝나면(자) 즉시 종료하는 것 같은 서버를 생성하려면 , -K 0 (와)과 지정합니다. 또, 결코 종료하지 않는 서버를 생성하려면 , -K -1 (으)로서 주세요.

    서버를 모니터 하는 경우, 어느 서비스 리퀘스트에 대해서 항상 새로운 프로세스를 생성하는 것 같은 포트 모니터가 있습니다. 그러한 모니터를 이용해 서버를 사용하는 것을 알 수 있고 있는 경우는, 서버는 처리 완료 후 즉시 종료해야 합니다. 그러한 서버를 생성하려면 , rpcgen 하 -K 0 옵션과 함께 사용해야 합니다.

-l  클라이언트측 그루터기를 컴파일 출력합니다.

-L  서버가 foreground로 기동되었을 경우, 서버의 에러를 기록하는데, 표준 에러 출력에 출력하는 대신에 syslog(3) (을)를 사용합니다.

-m  서버측 그루터기를 컴파일 출력합니다만, "main" routine는 생성하지 않습니다. 콜백 routine만을 작성하거나 초기화를 실시하기 위해서(때문에) 독자적인 "main" routine를 필요로 하는 경우에 편리합니다.

-M  rpcgen 가 생성한 코드와 유저가 쓴 코드의 사이에 인수나 결과를 수수하기 위해서, multi-thread 대응의 (MT-safe 인) 그루터기를 생성합니다. 유저 프로그램중에서 thread를 사용하는 경우에 유용합니다. 그러나 함수 rpc_svc_calls(3) (은)는 아직 MT-safe 로는 되고 있지 않습니다. 즉 rpcgen 가 생성한 서버측 코드는 MT-safe 가 아닙니다.

-N  수속이 복수의 인수를 가질 수 있도록(듯이) 합니다. 이것은 또, C 언어에 몹시 닮은 파라미터 인도 방법을 이용합니다. 그러니까 원격 수속에 있는 인수를 건네주는 경우, 그 인수에의 포인터를 건네줄 필요는 없고, 인수 그 자체를 건네줄 수 있습니다. 이 동작은 rpcgen 하지만 생성한 코드의 이전의 행동과는 다릅니다. 이전과의 호환성을 유지하기 (위해)때문에, 이 옵션은 디폴트에서는 유효하지는 않습니다.

-n netid
    netid 그리고 지정한 트랜스폴트용의 서버측 그루터기를 컴파일 출력합니다. netconfig 데이타베이스에는 netid 용엔트리가 존재하지 않으면 안됩니다. 이 옵션을 여러 차례 지정하는 것으로, 복수의 트랜스폴트에 대해서 서비스하는 서버를 작성할 수가 있습니다.

-o outfile
    출력 파일명을 지정합니다. 굳이 지정되지 않으면 표준 출력이 이용됩니다 ( -c, -h, -l, -m, -n, -s, -’, -Sm, -Ss, -t 모드시만).

-s nettype
    클래스 nettype 에 속하는 모든 트랜스폴트용의 서버측 그루터기를 컴파일 출력합니다. 서포트되고 있는 클래스는 이하와 같습니다: netpath, visible, circuit_n, circuit_v, datagram_n, datagram_v, tcp, udp (이러한 클래스의 의미에 대해서는 rpc(3) (을)를 참조해 주세요) 이 옵션은 여러 차례 지정할 수 있습니다. 주: 트랜스폴트는 컴파일시는 아니고 실행시에 선택됩니다.

-’  원격 수속 호출을 이용하는 샘플 클라이언트 코드를 생성합니다.

-Sm 어플리케이션을 컴파일 할 때에 이용하는 샘플 Makefile (을)를 생성합니다.

-Ss 원격 수속 호출을 이용하는 샘플 서버 코드를 생성합니다.

-t  RPC 디스팟치테이불을 컴파일 출력합니다.

-T  RPC 디스팟치테이불을 서포트하는 코드를 생성합니다.

    어느 특정의 타입의 파일을 생성하기 위해서, 이하의 옵션 -c, -h, -l, -m, -s, -’, -Sm, -Ss, -t (은)는 배타적으로 사용됩니다. 한편, 옵션 -D (와)과 -T (은)는 포괄적이며, 다른 옵션과 조합해 사용할 수 있습니다.

-Y pathname
    rpcgen 하지만 C 프리프로세서를 찾기 시작하는 디렉토리명을 지정합니다.

사용예
이하의 예:
    example% rpcgen -T prot.x

(은)는 5 종류의 파일: prot.h, prot_clnt.c, prot_svc.c, prot_xdr.c, prot_tbl.i 의 모두를 생성합니다.

다음의 예는 C 의 데이터 정의 (헤더)를 표준 출력에 출력합니다.
    example% rpcgen -h prot.x

-DTEST 의 테스트 버젼을 작성하기 위해(때문에), 클래스 datagram_n 에 속하는 전트랜스폴트용 서버측 그루터기를 표준 출력에 출력하려면 다음의 것 게 합니다:
    example% rpcgen -s datagram_n -DTEST prot.x

netid tcp 그리고 지정된 트랜스폴트용의 서버측 그루터기를 작성하려면 다음과 같이 해 :
    example% rpcgen -n tcp -o prot_svc.c prot.x

관련 항목
cc(1), rpc(3), syslog(3), inetd(8) NETP 메뉴얼의 rpcgen 의 장.