UNIX网络编程学习(4)--值-结果参数

转载 2012年03月21日 20:26:30
 

我们已经知道,当把套接口地址结构传递给套接口函数时,总是通过指针来传递的,即传递的是一个指向结构的指针。结构的长度也作为参数来传递,其传递方式取决于结构的传递方向:从进程到内核,还是从内核到进程。

1、从进程到内核传递套接口地址结构有3个函数:bind、connect和sendto,这3个函数的一个参数是指向套接口地址结构的指针,另一个是结构的整数大小,例如:

struct sockaddr_in serv;

/* fill in serv{} */

connect( sockfd, (SA*)&serv, sizeof(serv) );

由于指针和指针所指结构的大小都传递给内核,所以从进程到内核要确切拷贝多少数据是知道的,如图3.7所示。

套接口地址结构大小的数据类型确切地说应该是socklen_t,而不是int,POSIX建议将socklen_t定于为uint32_t。

2、与前面的传递方向相反,从内核到进程传递套接口地址结构有四个函数:accept、recvfrom、getsockname 和 getpeername。这4个函数的两个参数是:指向套接口地址结构的指针和指向表示结构大小的整数的指针,例如:

struct sockaddr_un cli;     /* Unix domain */

socklen_t len;

len = sizeof(cli);

getpeername(unixfd, (SA*) &cli, &len )

/* len may have changed */

为何将结构大小由整数改为指向整数的指针呢?这是因为:当函数被调用时,结构大小是一个值(value, 此值告诉内核该结构的大小,使内核在写此结构时不至于越界),当函数返回时,结构大小又是一个结果(result,它告诉进程内核在此结构中确切存储了多少信息),这种参数叫做值-结果参数(value-result)。

当使用值-结果参数作为套接口地址结构的长度时,如果套接口地址结构是定长的,则从内核返回的值也是定长的,如对于IPv4,sockaddr_in是16;对于IPv6,sockaddr_in6是28。但对于变长的套接口地址结构(如Unix域的sockaddr_un),返回值可能比结构的最大长度小。

原帖地址:http://www.cnblogs.com/ChangeIt/archive/2011/12/26/2302294.html

《UNIX操作系统》学习笔记

unix操作系统概述 概述:UNIX操作系统是一款非常流行的多任务、多用户操作系统。 特点:1、多任务——区别DOS(单任务)            2、多用户——  区别DOS(单用户)     ...
  • u013439635
  • u013439635
  • 2017年04月25日 17:24
  • 413

学习linux/unix编程方法的建议

看了这篇文章,看来自己的路还很长,想成为一个合格的程序员,并不是一件简单的事情。努力吧,呆娃!下面是原文,转过来,作为我程序员之路的一个参考! ---------------------------...
  • wm_1991
  • wm_1991
  • 2015年10月04日 22:34
  • 1028

UNIX再学习 -- shell编程

UNIX环境高级编程看了三章,遇到不少重定向等shell命令。本想到Linux时再讲,看来有必要提前了。之前有看过一本《嵌入式Linux软硬件开发详解》这本书里有简单介绍了一部分shell常用命令,就...
  • qq_29350001
  • qq_29350001
  • 2017年03月21日 14:45
  • 1273

UNIX经典命令详解

UNIX经典命令详解 第一章 目录及文件操作命令  1.1 ls  [语法]: ls [-RadCxmlnogrtucpFbqisf1] [目录或文件......]  [说明]: ...
  • Damonair
  • Damonair
  • 2015年12月01日 11:44
  • 3547

致各位虚幻4学习者

怎么说呢,能学虚幻4的人,能坚持下来学虚幻4的人,必定是对于游戏有无限的热忱,从内心里真正喜欢游戏的,没个学虚幻的人,可能都是抱着要做震惊世界的牛逼的游戏的想法,参与学习,每个虚幻开发者,必定是把游戏...
  • shangdi712
  • shangdi712
  • 2015年12月24日 11:48
  • 3302

Caffe学习笔记(七)—— solver参数说明及利用自己的数据集对权值微调

本文主要介绍:在进行网络训练和权值微调过程中,需要对solver中的参数进行设置,本文主要介绍solver中的参数设置,以及如何利用自己的数据集,对权值进行微调。 1. solver参数设置 ne...
  • hong__fang
  • hong__fang
  • 2016年09月04日 17:21
  • 3097

强化学习入门 第五讲 值函数逼近

对于模型已知的系统,值函数可以利用动态规划的方法得到;对于模型未知的系统,可以利用蒙特卡罗的方法或者时间差分的方法得到。...
  • Bixiwen_liu
  • Bixiwen_liu
  • 2017年04月20日 19:25
  • 1061

linux下命令执行结果作为其他命令输入参数

1. 通过ps命令获取对应程序的pid 比如这里要获取redis-server这个进程的pid # ps -ef | grep redis-server root 60415 1...
  • a515983690
  • a515983690
  • 2016年06月01日 10:56
  • 6311

unix/linux命令“ls -l”选项输出结果详解

from: http://hi.baidu.com/hoxily/item/12e2a02d03f77e0942634a8e   unix/linux命令“ls -l”选项输出结果详解 ...
  • keti_xuetangyi
  • keti_xuetangyi
  • 2014年02月19日 09:51
  • 3009

Unix和Linux下C语言学习指南

引言   尽管 C 语言问世已近 30 年,但它的魅力仍未减退。C 语言继续吸引着众多的开发者,他们为了编写、移植或维护应用程序而必须学习新技能。   本文是为了满足对C语言初学者或想提高...
  • luo964061873
  • luo964061873
  • 2014年03月01日 13:18
  • 3301
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:UNIX网络编程学习(4)--值-结果参数
举报原因:
原因补充:

(最多只允许输入30个字)