linux c读取文件中特定格式的内容

配置文件里的信息格式是这样的REC,SEQ[0],SERVICE[NULL],TIME[2011/04/1908:08:34.991],LEN[486]NO<012345... 配置文件里的信息格式是这样的
REC, SEQ[0], SERVICE[NULL], TIME[2011/04/19 08:08:34.991], LEN[486]
NO < 0 1 2 3 4 5 6 7 8 9 A B C D E F > DISPLY ASCII
00000 < 30 34 38 32 2e 01 30 34 38 32 30 31 30 32 30 30 > 0482..0482010200
00016 < 30 30 20 20 20 30 30 30 31 30 30 30 30 20 20 20 > 00 00010000
00032 < 依次类推
现在要求写一个函数
read_conf(FILE *fp, char *buf, int len)
{
}
首先读取第一行中LEN[486]中的486
然后读取每行中, <号之后, >号之前的数字,全部读完后,输出到一个文件里保存
刚开始学这个,请各位大牛帮帮忙啊,万分感谢!
<>之间的是十六进制,像2e这些都要的
展开
 我来答
施瓦辛格
2012-08-15 · TA获得超过566个赞
知道小有建树答主
回答量:459
采纳率:0%
帮助的人:243万
展开全部
给你一个相近的问题+答案供您参考:
问:
我想在/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 <stdlib.h>
#include <stdio.h>
#include <unistd.h>
#include <string.h>int main()
{
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上那个是!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友89d4e5a
2011-04-19 · 超过27用户采纳过TA的回答
知道答主
回答量:70
采纳率:0%
帮助的人:53.1万
展开全部
既然是配置文件,换行符是肯定有的(一般)。所以使用fgets读取每一行,然后查询关键字符即可定位。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
snerix
2011-04-19 · TA获得超过200个赞
知道小有建树答主
回答量:192
采纳率:100%
帮助的人:96.6万
展开全部
方法1:定义结构体,然后用数据去填充结构体
方法2,按字符串读出,一一解析
更多追问追答
追问
我刚开始学,能不能给出具体的代码,万分感谢哈
追答
00000 30 34 38 32 2e 01 30 34 38 32 30 31 30 32 30 30 
00016 30 30 20 20 20 30 30 30 31 30 30 30 30 20 20 20

这些子是什么数据?
代表了什么含义,你要告诉我某几个数字代表了什么含义
或者你把题目贴全了....
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
goatsucker
2011-04-19 · TA获得超过302个赞
知道小有建树答主
回答量:276
采纳率:0%
帮助的人:169万
展开全部
用指针循环移动 判断是不是你对应的数据 16进制的 只能这么处理
更多追问追答
追问
我的想法是每次读一行,在每行中,以空格为标识,一个的去,然后将取出的数据做判断
如果当前取到的是 ''为止,每行都这么做一遍
可是对代码都还不熟,写不出来。。。
对了,第一行是LEN[]中的数字
请帮下忙啊,非常感谢啊
追答
二进制的最大特点就是不能按字符串读 所以没有行的分别比如你想读len后面的那个数,比如你读出这个文件的内容为buf 内容长度为len如果是我我会:unsigned char *p=NULL unsigned char *q=NULL; p=buf;q=buf for(i=0;i<len;i++){if(p[i]='['&&p[i-1]='N'&&p[i-2]='E'&&p[i-3]='L'){q=p+1;}else if(p[i]=']'){memcpy(length,q,p-q);}  这个时候这个length就是486
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式