【问题标题】:rpc pointer not showing the right resultrpc 指针未显示正确的结果
【发布时间】:2015-03-07 20:36:47
【问题描述】:

所以我正在尝试使用一些 RPC 函数。

基本上我想将2个2*2矩阵相乘,客户端发送2个矩阵,客户端计算后发送矩阵。

我的客户收到的矩阵不是我发送的。

// server.c
matrice* multiply(matrice2 *m2)
{ 
    matrice* res=&(matrice){.w=0.0,.x=0.0,.y=0.0,.z=0.0};
    res->w=m2->m.w*m2->n.w+m2->m.x*m2->n.y; // ww'+xy'
    res->x=m2->m.w*m2->n.x+m2->m.x*m2->n.z; // wx'+xz'
    res->y=m2->m.y*m2->n.w+m2->m.z*m2->n.y; // yw'+zy'
    res->z=m2->m.y*m2->n.x+m2->m.z+m2->n.z; // yx'+z'z

    return res;
}

int main(void)
{
    ...
    stat = registerrpc(PROGNUM, VERSNUM,PROCNUM, multiply, (xdrproc_t)xdr_matrice2, (xdrproc_t)xdr_matrice);
    svc_run();
}

//client.c
int main (int argc, char **argv)
{
    matrice m={1.0,2.0,3.0,4.0};
    matrice n={9.0,8.0,7.0,6.0};
    matrice2 donnees = {m , n};
    stat = callrpc(host, PROGNUM, VERSNUM, PROCNUM, (xdrproc_t) xdr_matrice2, (char *)&donnees, (xdrproc_t)xdr_matrice, (char *)&res);
}

//include.h
typedef struct { double w; double x; double y; double z; } matrice;
typedef struct { matrice m; matrice n; } matrice2;
bool_t xdr_matrice(XDR *, matrice *);
bool_t xdr_matrice2(XDR *, matrice2 *);

//xdr_matrice.c
bool_t xdr_matrice(XDR *xdrs, matrice *m)
{
    return xdr_double(xdrs,&(m->w)) && xdr_double(xdrs,&(m->x)) && xdr_double(xdrs,&(m->y)) && xdr_double(xdrs,&(m->z));
}

bool_t xdr_matrice2(XDR *xdrs, matrice2 *m2)
{
    return xdr_matrice(xdrs,&(m2->m)) && xdr_matrice(xdrs,&(m2->n));
}

谁能解释一下为什么它不能正常工作或我犯了什么错误?

【问题讨论】:

  • 您的服务器的乘法似乎返回了一个指向局部变量的指针,该变量在函数返回时将超出范围。
  • 也许如果你声明res 是静态的并返回它的地址,那么它会起作用。我假设 xdr 确保您的服务器的功能(以及解码和编码)不能并行执行。

标签: c rpc xdr


【解决方案1】:

真的很傻, 我刚刚将乘法函数更改为静态res(显然return &res 并将-> 更改为.)并且它起作用了...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 2022-05-11
    • 1970-01-01
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多