整理下获取下挂设备主机名 DEMO
主要是对sscanf函数使用的应用,知道固定长度如何提取?知道固定符号截至如何提取?
#include <stdio.h>
#include <string.h>
#include <errno.h>
#include <stdlib.h>
#define TMP_FILE "/tmp/.lan_info_list"
//获取下挂设备主机名
char *iface_get_STAhostname(char *macaddr,char *hoststr)
{
char line_lan[256] = {0};
FILE *STA_list=fopen(TMP_FILE, "r");
if(!STA_list)
{
printf(" %s %d open sta_device file fail\n",__FUNCTION__, __LINE__);
return NULL;
}
while(!feof(STA_list))
{
if (fgets(line_lan, sizeof(line_lan), STA_list))
{
char macstr[32] = {0};
char num[5] = {0};
char ipstr[32] = {0};
char hostname[64] = {0};
unsigned int mac[6] = {0};
fprintf(stdout, "%s\n", line_lan);
if (sscanf(line_lan, "%[^|]|%[^|]|%[^|]|%[^|]", hostname, num, ipstr, macstr) != 4)
continue;
if (sscanf(macstr, "%02X:%02X:%02X:%02X:%02X:%02X", &mac[0], &mac[1], &mac[2], &mac[3], &mac[4], &mac[5]) != 6)
continue;
fprintf(stdout, "\033[;7;33mMAC: %s\033[0m\n", macstr);
snprintf(macstr, sizeof(macstr), "%02X%02X%02X%02X%02X%02X%s", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5], "\0");
printf("%s %d macaddr:%s macstr:%s\n",__FUNCTION__, __LINE__, macaddr, macstr);
if(!strcasecmp(macstr,macaddr))
{
printf("%s %d hostname:%s\n",__FUNCTION__, __LINE__, hostname);
if(hoststr)
memcpy(hoststr,hostname,strlen(hostname));
return hoststr;
}
}
}
fclose(STA_list);
return hoststr;
}
执行结果: