AIX中RPC使用

最近在看unix網絡編程卷二,在看到sun rpc那一部分的時候,發現幾個問題,我是在ibm AIX上面開發,才發現原來真的是不同的UNIX系統差別真的很大,不多說,先上程序,包括三個文件,一個是RPC說明文件,另一個是客戶端程序,還有一個是服務端程序。

1,RPC說明文件square.x

 

2,客戶端程序client.c

 

 

3,服務端程序server.c

#include "square.h"

square_out * squareproc_1( square_in *inp, struct svc_req *rqstp ){
 static square_out out;
 
 if (rqstp->rq_cred.oa_flavor == 1) {
  struct authunix_parms *au;

  au = (struct authunix_parms  *)rqstp->rq_clntcred;
  printf("AUTH_SYS: host %s, uid %ld, gid %ld/n", au->aup_machname, (long) au->aup_uid, (long) au->aup_gid);
 } 
 
 out.res1 = inp -> arg1 * inp -> arg1;
 return (&out);
}

 

程序編譯運行過程:

1, rpcgen square.x

     生成square.h, square_clnt.c, square_svc.c,square_xdr.c

2, gcc server.c square_svc.c square_xdr.c -o server -lnsl

3, gcc client.c square_clnt.c square_xdr.c -o client -lnsl

4, ./server

5, ./client localhost 5

 

程序運行結果:

client:

        result: 25

server:

        AUTH_SYS: host root, uid 0, gid 0

 

注意點:

1,在UNIX網絡編程一書中將square_out * squareproc_1( square_in *inp, struct svc_req *rqstp )寫成是square_out * squareproc_1_svc( square_in *inp, struct svc_req *rqstp ),經過對比源程序,發現在AIX中應該去掉

2, 在UNIX網絡編程中將au = (struct authunix_parms  *)rqstp->rq_clntcred;寫成au = ( struct authsys_parms * )rqstp->rq_clntcred;,在AIX中得用前者,因爲後者是用的Solaris

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章