我对“值----结果参数”的理解

本文详细解释了参数传递在操作系统调用过程中的两种方式:按值传递和按址传递。重点讨论了这一概念在套接字地址结构相关函数中的应用,包括如何通过传递长度参数来避免结构越界访问,以及在不同方向传递时长度参数的不同用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

值——结果参数,就是这么一种参数:传递的方向不同,导致其值和性质做改变。所谓传递的方向指的是从用户空间传递到内核,还是内核传递到用户空间。

当一个进程进行系统调用,把参数从用户空间传递到内核时,往往传递的是一个值,即按值传递。

当一个进程进行系统调用,把上次从用户空间传递到内核时的参数,从内核传递到用户空间时,传递的是指向该参数的指针,即按址传递。


这个”值——结果“参数用在套接字地址结构的相关函数中,往往会将一个套接字地址结构的指针和该结构的长度作为函数参数。

当这个函数是将该结构从用户空间传递到内核空间时,传递的长度是一个值,主要的目的是:由于有可能该结构是变长的,比如Unix,Datalink套接字地址结构就是变长的,告诉内核这个结构占用的最大的空间,如果对该结构进行写操作的话,不要进行地址越界了。而调用其他的函数对该套接字结构,进行从内核空间到用户空间的传递的话,这个长度参数是一个整型指针了,这个指针指向地址结构中的表示长度的成员。这个长度成员告诉了这个结构最终是用了多少空间。注意:此时的长度是内核自己进行赋值的,而不是用户操作的。



参考文献:《UNIX网络编程》第一卷


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值