数据的情况是按行存放,行数读取前不固定。 我这个实现方式不一定是最简单方便的,希望有更好的解决方式的网友留言告之~
当连接一个设备上来的时候是这种,两个如下叠加。
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‘;
时间: 2024-10-13 23:30:48