私はRPCベースのサーバークライアントアプリケーションを構築していました。関数から配列を返す方法
私は含まれていevent
呼ばstruct
ています
int type_id
long int time
は私が返すサーバー(event*
)での機能を持っている:私が欲しいもの
event *
log_1_svc(event *argp, struct svc_req *rqstp)
{
static event* result;
result = (struct event*)malloc (3 * sizeof (struct event));
while (i <3)
{
result[i].type_id = i;
result[i].time = i;
i++;
}
return &result
}
は、クライアント上の結果を受信しますこのポインタを使用します。
ここは、クライアントのサイト上のコードです:
log_prog_1(char *host,int client_type,int type_id,long int time)
{
event *result_1;
result_1 = log_1(&log_1_arg, clnt); // this calls the function in server and gurantee that the result is returned an address to pointer
int i =0;
while (i<3)
{
printf ("Type: %d\n",result_1[i].type_id);
printf ("Time: %ld\n",result_1[i].time);
[CODE][/CODE]
i++;
}
}
このコードは動作しますが、それは(クライアント端末に示した数字は、サーバの端末でのものと異なっている)のアドレスではない値を返すようです。
私は、サーバーのリターンresult
せてみました:それは働いていただけ最初の項目は、クライアントの端末で正しく印刷さ
return &result;
:(以前に書かれたように)
return result;
ない結果のアドレスを他の2つの項目は0です。
事前のソリューションと感謝を私に提供してください。)
このコードはコンパイルされません: 'event **'型の '&result'を返しています。実際のコードを投稿してください。 –
また、クライアントとサーバーが(おそらく)2つの別々のプロセスであるため、独立したアドレス空間を持つため、これを実行できない理由があります。他人の記憶を見ることはできません。生ポインタを転送する場合は、「共有メモリ」を調べる必要があります。 –
@OliCharlesworth、共有メモリであっても、メモリブロックは同じアドレスにある可能性は低いです。生のポインタではなく、共有メモリブロックへのオフセットを使用したいと思うでしょう。 –