首页 > 代码库 > 读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。

读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。

  数据的情况是按行存放,行数读取前不固定。 我这个实现方式不一定是最简单方便的,希望有更好的解决方式的网友留言告之~ 

  当连接一个设备上来的时候是这种,两个如下叠加。  

ff:ff:ff:ff:ff:ff
dot11RSNAStatsSTAAddress=ff:ff:ff:ff:ff:ff
dot11RSNAStatsVersion=1
dot11RSNAStatsSelectedPairwiseCipher=00-0f-ac-4
dot11RSNAStatsTKIPLocalMICFailures=0
dot11RSNAStatsTKIPRemoteMICFailures=0
hostapdWPAPTKState=11
hostapdWPAPTKGroupState=0
wpsUuid=638b7dae-1b43-534b-9456-d05a8dbfef04
wpsPrimaryDeviceType=10-0050F204-5
wpsDeviceName=KNT-111
wpsManufacturer=HUAWEI
wpsModelName=KNT-111
wpsModelNumber=KNT-111
wpsSerialNumber=SWYDU12358512544

  使用ShellCmd命令获取当下信息,并且利用文本处理命令提取当前的modelName

hostapd_cli -i ath0 all_sta | grep wpsModelName | awk -F= {print $2} | sed :a;N;$!ba;s/\n/,/g\‘

  这条命令执行完之后可以得到类似与KNT-111,KNT-222,KNT-333 这种类型的字符串。然后需要将这种字符串按照,号分隔开,分别提取到对于的空间中去,多少行数可以使用如下的命令:

 hostapd_cli -i ath0 all_sta | grep wpsModelName | wc -l 

  提取该字符串可以使用如下的方式:

int read_wps_device_name_in_str(char *param, int ncount)
{
    char *p;
    char *p2;
    unsigned int len=0;
    unsigned int count=0;
    p2 = param;
    while((count != ncount) && (*p2 != \0)) {
        p = strchr(p2,,);
        if (p) {
            len = p-p2;
            if (len > 64) {
                break;
            }
            strncpy(wps_device[count].DeviceName,p2,len);
            wps_device[count].DeviceName[len] = \0;
            count++;
            p2 = p + 1;
        } else {
            break;
        }
    }
    return 0;
}

在使用这个函数处理之前需要将待处理的字符串末尾加上一个‘,’号,总计数值则为行数。

通过shell读取的字符串尾部有个\n符需要剔除掉。

void util_strip_traling_spaces( char* one_string )
{
    char* tmp=one_string;
    int length=strlen(tmp);
    while(
            length
            &&(
                ( tmp[ length-1 ] == \r )
                || ( tmp[ length-1 ] == \n )
                || ( tmp[ length-1 ] == \t )
                || ( tmp[ length-1 ] ==   )
            )
        )
    {
        tmp[ length-1 ]=0;
        length--;
    }
}

 

buffer[strlen(buffer)] = ‘,‘;
buffer[strlen(buffer) + 1] = ‘\0‘;

读取多行数据,每行存放一个位置。:读取通过wps模式连接到设备的信息。