Linux 上的 C-RPC(冒泡排序)

标签 c rpc

我想使用 rpcgen 在 Linux 上创建 RPC 应用程序。 这是一种冒泡排序。 我使用了这个教程:CLICK HERE

这是我的代码:

#include <stdio.h>

void bubbleSort(int numbers[], int array_size)
{

int i, j, temp;

for (i =0; i <array_size; i++)
{
    for (j =0; j<array_size-1; j++)
    {
        if (numbers[j] > numbers[j+1])  {
            temp = numbers[j];
            numbers[j] = numbers[j+1];
            numbers[j+1] = temp;
        }
    }
}
}

int main(void)
{
int array[10000];
int i;

for(i=10000;i!=0;i--)
{
    array[i-1]=i;
}
bubbleSort(array,10000);
for(i=0;i<10000;i++)
{
    printf("%d\n",array[i]);
}
return 0;
} 

我的问题是我应该在“file_name.x”和“file_name_client.c”和“file_name_server.c”中放入什么才能起作用。

感谢您的每一个提示和回答。

最佳答案

您必须声明一个函数,该函数接受一个可变长度整数数组并返回相同的值:

bubblesort.x 的 IDL 代码:

typedef int sortarray<>;

program BUBBLESORT {
    version MESSAGEVERS {
        sortarray doBubbleSort(sortarray) = 1;
    } = 1;
} = 31337;

您当然无法就地对其进行排序,因此您必须返回排序数组才能通过网络传输结果。

现在用rpcgen bubble.x编译它

由于 C 不知道 native 可变长度数组,因此 sortarray 类型将扩展为:

typedef struct {
    u_int sortarray_len;
    int *sortarray_val;
} sortarray;

以及服务的函数原型(prototype):

extern  sortarray * dobubblesort_1_svc(sortarray *, struct svc_req *);

现在实现函数 dobubblesort_1_svc,它应该使用排序函数对 sortarray 中的数组进行排序,然后返回结果数组(如果就地排序,也可以直接将第一个参数返回给 dobubblesort_1_svc)

评论:

然而,SunRPC 已经过时且令人痛苦。您确实应该尽可能使用现代 RPC 机制(SOAP、XMLRPC、ORB,等等)

关于Linux 上的 C-RPC(冒泡排序),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34851694/

相关文章:

c - 如何简化这些复合逻辑表达式?

c - 将变量传递给 nasm 过程

c - 在 C 中声明数组大小

java - Java 和 C 之间的远程过程调用

java - iPhone Grails 远程选项

c++ - 使用 ncalrpc 的 RPC 端点列表

java - 关于extern "C"的C++到Java的转换问题

c - 发送带有修改报头的 TCP 段

Erlang:如何查看远程节点上产生的进程中 io:format/2 调用的输出

linux - 为什么 rpcbind 每次重启都会打开一个新的不同的端口?