免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2135 | 回复: 0
打印 上一主题 下一主题

值-结果参数 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-02-18 02:30 |只看该作者 |倒序浏览
    我们已经知道,当把套接口地址传递给套接口函数时,总是通过指针传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递的方式取决于结构的传递的方向:从进程到内核,还是从内核到进程。
    1、从进程到内核传递的套接口结构有3个函数:bind,connect和sendto,这三个函数的一个参数是指向套接口结构的指针,另一个是结构的大小,如:
   
struct sockaddr_in serv;
/*fill in serv[]*/
connect(sockfd,(SA *)&serv,sizeof(serv));
   由于从进程到内核的参数是指向结构的指针和结构的大小,所以从进程到内核拷贝的数据是确定的。
    2、 与前面的正好相反,从内核到进程传递的套接口地址结构有四个函数:accept,recvfrom,getsockname,和getpeername,其参数是:指向套接口结构的指针和指向表示结构大小的指针,如:
struct sockaddr_in cli;
socklen_t len;
len = sizeof(cli);
getpeername(unixfd,(SA *)&cli,&len);  /*len mey be change*/
   为何将结构大小由整数改为整数的指针呢?这是因为当函数被调用时,结构大小是一个值(value,此值告诉内核大小,是内核写结构是不至于越界),当函数返回时,结构大小又是一个结果(result,它告诉进程内核确实在结构中存储了信息),这种参数类型叫做值-结果参数。


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u1/53855/showart_1832097.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP