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

Posted

技术标签:

【中文标题】linux上的C-RPC(冒泡排序)【英文标题】:C- RPC on linux ( Bubble sort) 【发布时间】:2016-01-18 09:51:45 【问题描述】:

我想使用 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”中添加什么才能起作用。

感谢每个提示和答案。

【问题讨论】:

`“file_name.x”和“file_name_client.c”和“file_name_server.c”`???那些是什么? 欢迎来到 Stack Overflow! .请先阅读How to Ask页面。 顺便说一句,你知道这会很愚蠢,因为效率极低吗?你的意思是 RPC/XDR 或 ONC/RPC,而不仅仅是 RPC! 【参考方案1】:

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

bubblesort.x 的 IDL 代码:

typedef int sortarray<>;

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

你当然不能就地排序,所以你必须返回sortarray才能让结果通过网络传输。

现在用rpcgen bubble.x编译它

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

typedef struct 
    u_int sortarray_len;
    int *sortarray_val;
 sortarray;

以及服务的函数原型:

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

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

评论:

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

【讨论】:

来自 OP:“错误太多。你能在编译“bubblesort.x”后发送:“bubblesort_client.c”和“bubblesort_server.c”代码吗?因为当我做了:“make -f Makefile.bubblesort”错误太多了。”。 我的回复:对不起,我给了你一个kickstart,但我不会完整地编写你的代码。尽你所能,如果仍然有错误,请扩展你的问题,包括这些。

以上是关于linux上的C-RPC(冒泡排序)的主要内容,如果未能解决你的问题,请参考以下文章

冒泡排序,算法以及优化

链表上的冒泡选择排序算法

使用JavaScript完成排序算法:冒泡排序选择排序 快速排序

搜索与排序—— 冒泡排序选择排序插入排序与希尔排序

简单分析选择排序,冒泡排序

冒泡排序学习笔记