APP下载

花5分钟了解一下linux套界面层

消息来源:baojiabao.com 作者: 发布时间:2024-05-09

报价宝综合消息花5分钟了解一下linux套界面层

当初我学习linux套界面程式设计的时候,就有个疑问,要想编写一个socket程式,首先得先呼叫socket函式,返回一个socket描述符,紧接着还有系结埠和ip等,于是,我抽出时间,阅读linux核心中的套界面的源代码,才明白是怎么回事,今天就把我学的东西与大家进行分享,当然一篇文章不能介绍所有的内容,我就一篇一篇的写,给大家进行介绍,文章的更新,得看我的自由时间了,好了,开始吧。

现如今,套界面已经成为通用的网络程式设计的界面,大家所熟悉的操作系统,基本都支援套界面的网络程式设计,套界面之所以受到广大的应用,是因为套界面它的设计,它帮我们遮蔽了底层的具体细节,应用程序无需关心底层的具体实现,而是借助套界面层将应用程序的请求对映到具体的协议上,见下图所示:

图1

从上图我们知道,应用程序通过系统呼叫切换到核心空间,在核心空间呼叫套界面函式去处理应用程序的请求,具体呼叫TCP的界面还是UDP的界面,取决于套界面中的proto_ops中的函式。proto_ops的赋值取决于family。后续程式码分析的时候会讲到。

接下来我们看一看套界面层最核心的资料结构,socket:

图2

socket_state state:

这个变数用于表示套界面所处于的状态,这些状态仅仅对TCP有用。

图2

const struct proto_ops*ops:

指定了套界面对应的传输层型别的呼叫界面,用来将套界面对映到对应的传输层的实现,主要的型别如下:

图3

struct file*file:

储存了与该套界面系结的档案结构,具体后续章节会讲到。

从上述的介绍我们知道,struct proto_ops*ops这个资料结构是socket的核心的结构,因为通过它可以呼叫传输层的真正的实现。

而这种设计,恰恰是我们可以学习的,也是linux核心比较优秀的设计思想,这种遮蔽底层细节的设计,在未来的专案中,我们可以用到。

2019-12-31 08:50:00

相关文章