- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
报文解析之数据更新
课程设计报告
课程名称: Unix下C 设计题目: 报文解析之数据更新 姓 名: 专 业: 网络工程 班 级: 学 号:
计算机科学与技术学院
网络系
2013 年 12月 25 日
设计项目: 报文解析之数据更新
选题背景
报文解析之数据更新:通过命令参数指定更新内容和更新条件,可模仿update语句。
文件中定义每个学生的相关信息,包括学号、学生姓名、年龄、性别、系别。针对当前题目可以将每一个学生的信息定义成固定长度格式,方便检索和更新。
例如指定程序名称为update
使用方法可指定为 update a.txt set dept=cs where s#=010101
设计思路
完成文件update.c实现更新功能,更新格式如下:
update datafilename set fieldname1=value1 where fieldname2=value2
严格按照格式输入命令行参数,等号两边不能存在空格。每次只能改变一个字段的值Fuction部分用来专门设置具体实现函数功能过程,来完成更新功能。再更新过程中利用了三个函数来实现整个过程。
函数get_content是对fieldname=value的filename和value进行提取信息。
函数check是对每行信息检查是否符合where fieldname2=value2条件。
函数change是对每行符合where fieldname2=value2条件的信息,实现所需要的更新操作。
在这过程中为了数据的方便,编写了makedata.c来生成数据;由于对datafile进行了多次修改,内容的变化不利于多次测试,为了多次测试,编写了retest.c文件生成retest可执行程序来还原datafile的内容。
主要问题的解决方法和关键技术
报文解析是UNIX应用的重要内容。报文解析利用到了对于文件的操作,打开文件,关闭文件,从文件流读取以及输出到文件流中,从文件流中读取一个字符串之后,对其信息进行提取,提取出所需要的信息。函数fopen打开或创建文件;fclose关闭文件;函数freopen重新打开文件;函数remove删除磁盘文件;函数rename更改文件名称?如果遇到换行符,该换行符将被读入字符串,再在换行符后加一’\0’”;而在本次实验中所有的判断字符串结束时利用str[i]!=’\0’忽略了’\n’的存在导致每次查找最后一项时查找不到,更改最后一项时又出现输出格式的错误。
图3-4 更改信息缺少换行
这个问题是本次实验最大的收获,多出单步执行才检查到错误,以下是单步执行的过程:
图3-5 单步执行的代码
单步执行时候,对于同样的Math开始的时候,利用strcmp的结果并不是0,所以又将两个字符串分别用strlen函数测量出长度并输出,发现从报文中解析出来的Math的长度为5,而且与以上输出结果缺少换行问题,都是问题出现在了最后一个字母的部分,并且将fgets和fputs换掉之后,运行结果一切正常,所以可以知道是fgets和fputs的问题。
图3-6单步执行的结果
修改正确后输出单步执行的结果,发现现在结果已经正确,更改代码如下,将’\0’改为’\n’:
图3-7错误代码
图3-8正确代码
四、程序流程图
五、原程序清单
#include stdio.h
#include string.h
#include stdlib.h
/*该函数实现的是对dept=Math提取dept信息和Math信息,将类别以数字形式存在*type中,将内容存在content中,类型0、1、2、3、4分别表示s#、name、age、*sex、dept即类型所对应的数字正好符合每一项所在的几个冒号的后面,方便更改信息*的处理,由于对于set和where两处都需要用到此查找方法,故写成函数形式,可以多次调用实现同一功能*/
int get_content(char str[],char content[]){
int type=-1;
if(strncmp(str,s#,2)==0){
type=0;
strcpy(content,str+3);
}else if(strncmp(str,name,4)==0){
type=1;
strcpy(content,str+5);
}else if(strncmp(str,age,3)==0){
type=2;
strcpy(cont
文档评论(0)