值—结果参数详解

值-结果参数 (socket编程中一到七的struct  sockaddr_in的长度参数)

1.概念:当函数参数是从内核到进程时,函数被调用时参数大小是一个值,它告诉内核该参数的结构大小避免内核写操作越界,函数返回时,参数的结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做 值-结果参数

2.例子:八个socket编程中涉及的函数中,总是通过指针来传递指向结构的指针。同时结构的长度也作为参数来传递,但是其传递的方法取决于结构的传递方向:是从内核到进程还是从进程到内核。详细如下:
1>.参数从进程到内核:
bind、connect,sendto从进程到内核传递参数,它明确知道要拷贝多少以及拷贝的数据。因此一般传递一个长度,例如:
struct  sockaddr_in  addr;
memset(&inAddr,  0,  sizeof(inAddr));
addr.sin_addr.s_addr=inet_addr(INADDR_ANY);
addr.sin_family=AF_INET;
addr.sin_port=htons(PORT);

//..........

connect(  sockfd,  (struct  sockaddr*)&addr,  sizeof(addr)  );

2>.参数从内核到进程:
accept、getsockname、getpeername,recvfrom函数被调用时结构大小是一个值,它告诉内核该结构的大小避免内核写操作越界,函数返回时,结构大小又是一个结果,它告诉进程内核写进数据的多少,这种参数叫做 值-结果参数 。例如:
struct  sockaddr_in  addr;

//..........

socklen_t  len  sizeof(addr);

getpeername(  sockfd,  (struct  sockaddr*)&addr,  &len  );

[Remark]
sendto是从进程到内核传递参数的。
recvfrom是从内核到进程传递参数的
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值