您的位置:首页 > 运维架构 > Linux

linux目录下多个文件行数比对函数 关键字遍历文件 linux命令写入C函数

2015-11-24 11:13 471 查看
人,一定要有勇气和踏实的态度面对改变和选择!开发,零经验起步!

文件行数比对函数:
输入参数:接口文件绝对路径,日期(格式YYYYMMDD:20150716)
根据路径和日期,分别获取这add、del、upd这3个文件的行数,然后与周秀读取rec20150716.chk中文件的条数做对比。
如果相同返回 RET_SUCCESS,如果不相同返回RET_FAIL,并打印出以下信息。
任务分析:
1.如果输入为目录路径,需要遍历读取目录下的每个文件,提取“日期”关键字打开并读取文件。考虑了链表、打开目录等函数、建立文件结构体、strcmp对比名称时利用输入参数作为变量···然而。。。真正的解决思路确实这样的:
正是因为目录下文件名是很规范的 rec+20150915+num+add这样的形式,可以考虑
1.目录下全部文件名读取,赋值给文件路径变量。
2.调用单个文件处理函数,由输入的参数将全路径拼接,然后利用循环体,将linux命令结果输出至C语言函数。
开发提示1:
char FILE_PATH_1[200];
memset(FILE_PATH_1, 0x00, sizeof(FILE_PATH_1));
strcpy(FILE_PATH_1,"/settle/stl_cdr/inter123");//此目录是AIX小机上的一个目录
开发提示2:
(Check_LineCount(&FILE_PATH_1···//目录放到这个变量
开发提示3:
char add_file[200];
sprintf(add_file, "%s/rec%s.num.add", FILE_PATH_1,filedate);//重点读一下,全路径拼接
*add_chk=Get_File_Count(&add_file);
开发提示4://求取目录下单独文件的行数 函数Get_File_Count
int Get_File_Count(char *FILE_PATH_All)
{ int num_chk=0;
char cmd[200];
FILE *fp;
sprintf(cmd, "cat %s | wc -l", FILE_PATH_All);
if((fp = popen(cmd, "r")) == NULL)
return -1;
fscanf(fp, "%d", &num_chk);
pclose(fp);//popen和pclose我并不了解,但是这样做就ok
···
5.编写makefile文件,执行make工具
文件行数比对函数:建立check_400_file.pc文件,编写Check_LineCount()函数,处理目录下所有文件的行数,输入参数为目录路径,通过sprintf()拼接全路径,调用Get_File_Count()处理单个文件行数,采用了"cat %s | wc -l"命令。获取后,主函数继续调用之前chk文件的函数,进行结果判断。
测试结果:能够获取目录下包含特定日期关键字的文件,求取行数并输出至主函数。调用findcount函数也正常输出至主函数,进行判断。

编后记:在开发中遇到问题和想法,如果有导师,一定交流下,可以指引自己少发牢骚!与其处于纠结,不如请教他人!

谢谢关注!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: