2017-04-03 7 views
0

分散システムを作成するためにreken.x、client.cおよびserver.cというファイルがあります。クライアントは、2つの素数(したがって1つの数)の積を、サーバ上の「ontbind」関数に送り、これを2つの素数に戻します。これは、 "reken_in"と "reken_uit"構造体の変数として "getal1"、 "antwoord1"、 "antwoord2"をintとして宣言するとうまく動作します。私は符号なしlong long型を使用する場合しかし、私は次のエラーを取得する:rpcgenでunsigned long longを使用するとエラーが発生する

[email protected]:~/Desktop/tarbal$ rpcgen reken.x 
unsigned long long getal1; 
^^^^^^^^^^^^^^^^^^^ 
reken.x, line 2: expected '*' or 'identifier' 

にはどうすればいいのunsigned long long型で、この作品を作るのですか?以下の私のコードを参照してください。 XDRで

reken.x

struct reken_in { /*input argument*/ 
    unsigned long long getal1; 
}; 

struct reken_uit { 
     unsigned long long antwoord1; 
    unsigned long long antwoord2; 
}; 

program BEREKEN { 
    version BERVERS{ 
     reken_uit ONTBIND(reken_in) =1; /*procedure nr. 1*/ 
     }=1; 
}=0x31230000;  /*programma nummer*/ 

いるclient.c

#include <stdio.h> 
#include <rpc/rpc.h> 
#include "reken.h" 
#include <stdlib.h> 

main(int argc,char *argv[]) 
{ 
//hi 
CLIENT *cl; 
char *server; 
reken_in getallen; 
reken_uit *antw; 

if(argc !=3) { 
    puts("aantal argumenten niet goed <server productPriemen>"); 
    exit(1); 
} 

server=argv[1]; 
getallen.getal1= strtoull(argv[2], NULL, 10); 

cl=clnt_create(server,BEREKEN,BERVERS,"tcp"); 
if(cl==NULL) { 
    printf("fout bij het zoeken naar de server"); 
    clnt_pcreateerror(server); 
    exit(1); 
} 

antw= ontbind_1(&getallen,cl); 
if(antw==NULL) 
    puts("fout bij teruggeef parameter"); 

printf("Het getal %llu is het product van priemgetal %llu en %llu\n",getallen.getal1, antw->antwoord1, antw->antwoord2); 
exit (0); 
} 

server.c

#include <stdio.h> 
#include <rpc/rpc.h> 
#include <dirent.h> 

#include "reken.h" 
#include <math.h> 

reken_uit *ontbind_1_svc(struct reken_in *g,struct svc_req *reg) 
{ 
    static reken_uit getallen; 

    unsigned long long number = g->getal1; 
    unsigned long long i; 
    unsigned long long fact; 
    for(i = 2; i <= sqrt(number); i++) { //loop tot de sqrt 
     if (!isPrime(i) || (i % 2 == 0 && i != 2)) continue; 

     if (number % i != 0) continue; 

     fact = number/i;  //deel door de i. De i is een prime 

     int prime = isPrime(fact); 

     if (!prime) continue; 

     getallen.antwoord1 = i; 
     getallen.antwoord2 = fact; 
     return (&getallen); 
    } 

    return (&getallen); 
} 

int isPrime (const long long number) { 
    int i; 
    for(i = 2; i < number/2; i++) { // 7 
     if ((number % i) == 0) // 7 % 2 == 1 
      return 0; 
    } 
    return 1; 
} 

答えて

1

unsigned long longが定義されていない場合は、代わりに unsigned hyperまたは hyperを使用してください。詳細はspecをご覧ください。

関連する問題