其实对于自己装了网卡驱动的来说,应该从最根本的驱动中获取速率。

但是用ioctl()也可以,其实实现和iwconfig命令相同。

仅仅获取速率这部分:

[cpp] view plain copy
 

#include <stdio.h>  
#include <stdlib.h>  
#include <sys/socket.h>  
#include <string.h>  
#include “wireless_copy.h”  
#define dvname “ath0”  
int get_rate(int sock, struct iwreq* wrq,__s32 rate);  
int main()  
{  
    struct iwreq wrq;  
    int sock;  
    char gInterfaceName[16];  
    __s32 rate;  
    memset(gInterfaceName, 0, sizeof(gInterfaceName));  
    strcat(gInterfaceName,dvname);  
    sock = socket(AF_INET, SOCK_DGRAM, 0);  
        if (sock < 0)  
        {  
            printf(“Error Creating Socket for ioctl/n”);  
            return 0;  
        }  
    memset(&wrq, 0, sizeof(wrq));  
    strncpy(wrq.ifr_name, gInterfaceName, IFNAMSIZ);  
    get_rate(sock, &wrq,rate);  
    printf(“/nrate:%dM/n/n”,wrq.u.bitrate.value/1000000);  
    return 0;  
}  
int get_rate(int sock, struct iwreq* wrq,__s32 rate)  
{  
    if(ioctl(sock, SIOCGIWRATE, wrq) < 0)  
    {  
        perror(“Ioctl error”);  
        return(0);  
    }  
    return 1;  
}  

其中wireless_copy.h可以从madwifi /tools 文件夹中找到。