给你一个相近的问题+答案供您参考:
问:
我想在/proc/net/ip_conntrack文件下得到dport和bytes后面的数值,应该怎么做????
该文件内容格式如下:
(line1)tcp 6 0 CLOSE src= 192.168.0.3 dst=192.168.0.6 sport=32779 dport=80 packets=2 bytes=100 src=192.168.0.6 dst=192.168.0.3 sport=80 dport=32779 packets=2 bytes=84 [ASSURED] use=1
(line2)tcp 6 51 CLOSE_WAIT src=192.168.0.3 dst=192.168.0.7 sport=4777 dport=1123 packets=7 bytes=314 src=192.168.0.7 dst=192.168.0.3 sport=1123 dport=4777 packets=7 bytes=302 [ASSURED] use=1
(line3)tcp 6 112 SYN_SENT src=192.168.0.3 dst=192.168.0.8 sport=32785 dport=80 packets=3 bytes=180 [UNREPLIED] src=192.168.0.8 dst=192.168.0.3 sport=80 dport=32785 packets=0 bytes=0 use=1
答:
#include
#include
#include
#include
{
FILE* fp = NULL;
char cmd[512];
char dport[32];
int i=0;
sprintf(cmd, "grep -o -E \"dport=[0-9]{1,}\" /proc/net/ip_conntrack | cut -d\"=\" -f2");
if ((fp = popen(cmd, "r")) != NULL)
{
while(!feof(fp)){
memset(dport,'\0',sizeof(dport));
fgets(dport, sizeof(dport), fp);
if(strlen(dport)>0) printf("dports is: %s", dport);
}
pclose(fp);
}
return0;
}
PS:我试过了,可以,想找原文百度”关于从文件中读取特定值的问题“关键字,CSDN上那个是!
既然是配置文件,换行符是肯定有的(一般)。所以使用fgets读取每一行,然后查询关键字符即可定位。
方法1:定义结构体,然后用数据去填充结构体
方法2,按字符串读出,一一解析
用指针循环移动 判断是不是你对应的数据 16进制的 只能这么处理