请教,Linux下的socket编程,请在网络通信的哪一部分调用了网卡驱动程序的open和close函数?

[复制链接]
查看11 | 回复3 | 2021-1-27 06:30:18 | 显示全部楼层 |阅读模式
socket编程,只有socket,bind,connect等函数,并没有打开网络设备的操作。我的理解是网络设备初始化是在加载驱动模块的时候调用的,但是还需要打开网卡啊,怎么在socket中没有体现,就可以直接使用网卡通信了呢?
分 -->
回复

使用道具 举报

千问 | 2021-1-27 06:30:18 | 显示全部楼层
socket函数会返回一个socket_fd,你就把它理解成文件描述符就行了。bind,connect等函数都是通过它联系起来的。
你的理解是正确的。其实和打开一个普通文件一样,首先要加载硬盘的驱动。
此外,linux里,网络部分是比较特殊的,没有网络设备文件。叫interface。
回复

使用道具 举报

千问 | 2021-1-27 06:30:18 | 显示全部楼层
谢谢你的解答,我主要是对open函数什么时候调用比较疑惑,使用设备之前要打开设备,驱动程序也定义了open函数,但是不知道在编程的那部分调用。肯定是调用了,要不不打开设备,就没法使用设备啊!到底是在哪里调用的open和close函数呢?
回复

使用道具 举报

千问 | 2021-1-27 06:30:18 | 显示全部楼层
貌似Socket就是吧,它会调用一个open,映像中是这样,网卡驱动程序在系统启动的时候就会以设备的形式存在,并且驱动加载好以后好像有一个对应于网卡的跟fd类似的文件系统里面的一个标识,而open使用的就应该是这个标识,从而跟这张网卡发生联系
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行