日期:2014-05-16  浏览次数:20699 次

熟悉 ioctl()函数的进 在线等!!!
问题1:
struct ifconf ifc;
fd = socket (AF_INET, SOCK_DGRAM, 0);
ioctl (fd, SIOCGIFCONF,  &ifc);
这是获取所有接口信息,然后保存在ifc里面,我一直没理解这个接口描述符fd 的作用是什么,可以随便设么!?

问题2: 
struct ifreq req;
static void GetMacAndIp(int sockfd, IpAndMac *pIpAndMac ){
...
ioctl(sockfd, SIOCGIFADDR, &req);
....
}这是获取该接口ip的案例,这里的sockfd可以随便指定的么?这里是获取sockfd绑定的ip地址么?
这个获取ip 操作好像还要知道网卡名(req.ifr_name),为什么要指定网卡名?
问题3:
ioctl()函数获取所有接口信息,和获取单个接口信息需要哪些已知条件,就是应用ioctl()的细节问题。
求各位前辈帮忙解惑,这个问题困扰了我几天了。我有代码急需解决!
:

------解决方案--------------------
ioctl是定义用来提供了一种获得设备信息和向设备发送控制参数的手段。不可以随便设置的,这个要看内核实现了那些,就可以用那些。而且sockfd,也必须打开和内核实现的相关驱动的描述符,比如设备文件,socket.
------解决方案--------------------
http://www.360doc.com/content/11/1031/18/7891085_160615435.shtml
------解决方案--------------------
iotcl 里面其实就是一个switch case 结构!

自己随便看看内核源码,或者驱动源码!