已阅读5页,还剩4页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux下RPC调用编程作者: 来源:/linux_coder 发表时间:2007-05-01 浏览次数: 26823 字号:大中小中国源码网内相关主题链接 Linux 2.6内核中新的锁机制-RCU XML-RPC in Python简介 Linux起源与GNU简介 linux设置环境变量的方法 c+文件调用c头文件注意事项 linux下使用minicom的几个命令 linux内核编译问题 递归函数的调用过程 linux rpc在内核中实现,源代码位置是net/sunrpc/sunrpc不仅实现了rpc的调度,同时将rpc请求构造解析发送接受的通用部分进行了提取。要定义自己的rpc调用仅需要实现那些非通用的部分,下面简要介绍怎么实现一个自己的rpc客户端(2.4内核)主要数据结构介绍1。rpc请求/* This is the RPC buffer*/struct rpc_iov struct iovec io_vecMAX_IOVEC; /使用10个 iovec 可以操作分散的buffer unsigned int io_nr; unsigned int io_len;/* This describes a complete RPC request*/struct rpc_rqst /* * This is the user-visible part */ struct rpc_xprt * rq_xprt; /* RPC client */ struct rpc_timeout rq_timeout; /* timeout parms */ struct rpc_iov rq_snd_buf; /* send buffer 发送缓冲区*/ struct rpc_iov rq_rcv_buf; /* recv buffer 接受缓冲区*/ /* * This is the private part */ struct rpc_task * rq_task; /* RPC task data */ _u32 rq_xid; /* request XID */ struct rpc_rqst * rq_next; /* free list */ volatile unsigned char rq_received : 1;/* receive completed */ /* * For authentication (e.g. auth_des) */ u32 rq_creddata2; /* * Partial send handling */ u32 rq_bytes_sent; /* Bytes we have sent */#ifdef RPC_PROFILE unsigned long rq_xtime; /* when transmitted */#endif;#define rq_svec rq_snd_buf.io_vec#define rq_snr rq_snd_buf.io_nr#define rq_slen rq_snd_buf.io_len#define rq_rvec rq_rcv_buf.io_vec#define rq_rnr rq_rcv_buf.io_nr#define rq_rlen rq_rcv_buf.io_len流程介绍1。注册自己的rpc调用#ifndef MAX#define MAX(a, b) (a) (b)? (a) : (b)#endif#define PROC(proc, argtype, restype, timer) xxx_clnt #proc, (kxdrproc_t) xxx_clnt_encode_#argtype, (kxdrproc_t) xxx_clnt_decode_#restype, MAX(XXX_#argtype#_sz,XXX_#restype#_sz) , timer / 这里注册了3个rpc调用,分别是:read、write、getsizestatic struct rpc_procinfo xxx_clnt_procedures4 = PROC(null, void, void, 0), PROC(read, readargs, readres, 0), PROC(write, writeargs, writeres, 0), PROC(getsize, getsizeargs, getsizeres, 0),/*上面结构实际效果是下面这样其中注册了每个rpc请求和返回的编码解码函数,在步骤4中描述static struct rpc_procinfo xxx_clnt_procedures4 = xxx_clnt_null, (kxdrproc_t)xxx_clnt_encode_void, (kxdrproc_t)xxx_clnt_decode_void, MAX(XXX_void_sz, XXX_void_sz), 0, xxx_clnt_read, (kxdrproc_t)xxx_clnt_encode_readargs, (kxdrproc_t)xxx_clnt_decode_readres, MAX(XXX_readargs_sz, XXX_readres_sz), 0, xxx_clnt_write, (kxdrproc_t)xxx_clnt_encode_writeargs, (kxdrproc_t)xxx_clnt_decode_writeres, MAX(XXX_writeargs_sz, XXX_writeres_sz), 0, xxx_clnt_getsize, (kxdrproc_t)xxx_clnt_encode_getsizeargs, (kxdrproc_t)xxx_clnt_decode_getsizeres, MAX(XXX_getsizeargs_sz, XXX_getsizeres_sz), 0,;*/static struct rpc_version xxx_clnt_version1 = 1, sizeof(xxx_clnt_procedures)/sizeof(xxx_clnt_procedures0), xxx_clnt_procedures;static struct rpc_stat xxx_clnt_rpcstat;static struct rpc_version* xxx_clnt_version = NULL, &xxx_clnt_version1,;struct rpc_program xxx_clnt_program = xxx, XXX_PROGRAM, sizeof(xxx_clnt_version)/sizeof(xxx_clnt_version0), xxx_clnt_version, &xxx_clnt_rpcstat,;2。在运行前先创建rpc调度线程if (rpciod_up() != 0) printk(xxx:unable to run async scheduler!n); return -1;3。实现rpc调用函数以read为例struct xxx_readargs readargs; /用户自定义请求参数结构struct xxx_readres readres; /用户自定义请求返回结构struct rpc_message read_msg = 1, &readargs, /以指针形式注册到rpc消息结构中 &readres, NULL,;/ 同步的情况int xxx_read(?) int retval = 0; / 设置发送的属性 readargs.? = ?; readargs.? = ?; / 设置返回参数的属性 readres.? = ?; retval = rpc_call_sync(xxx_clnt, &read_msg, 0); if (retval count; / 部分属性参数的打包 p = xdr_encode_fhandle(p, args-fh); p = xdr_encode_hyper(p, args-offset); *p+ = htonl(count); *p+ = htonl(args-stable); *p+ = htonl(count); req-rq_slen = xdr_adjust_iovec(req-rq_svec, p); /* Get the number of buffers in the send iovec */ nr = args-nriov; if (nr+2 MAX_IOVEC) / rpc请求只能最大支持10个iovec printk(KERN_ERR NFS: Bad number of iov
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 油田化学单选题及答案展示
- 游戏理论考试题目全解与答案
- 2025-2026学年扶风县数学三年级下学期期中预测试题含答案解析
- 2025-2026学年德惠市三年级数学下学期期末复习检测试题含答案
- 河南近年流行美食试题及答案解析
- 温病学测试题及答案三
- 2025-2026学年山西省大同市广灵县四年级数学下学期期末学业水平测试模拟试题(含答案解析)
- 4月寒假思想动态调查报告2026(3篇)
- 科目四考试典型试题与答案
- 《小数乘整数》课件
- 智能建造概论课程介绍
- 超低能耗建筑节能技术研究
- 精神患者冲动护理
- 2022电力工程导地线展放安装施工作业指导书
- 儿科晕厥护理查房
- DB23-T 2319-2019 红松人工林大径材定向培育技术规程
- 《高中生心理健康教育》教师用书郑希付主编
- 《煤矿防治水细则》全文
- T-CWEC17-2020水利水电勘测设计单位安全生产标准化评审规程
- 与孩子达成的手机使用协议君子协议
- 口腔肿物的护理课件
评论
0/150
提交评论