周兆熊 通过本文主要向大家介绍了linux文件系统代码,linux 文件系统源代码,linux文件传输工具,linux文件系统目录,linux恢复删除文件等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文分享了Linux下控制(统计)文件的生成的C代码实现案例,供大家参考,具体内容如下
一、需求描述
不定时地在Linux机器下的某目录中放入文件,文件内容中包含了用户号码、起止时间等字段,现要求编写一程序来统计目前该目录中所有文件中的记录总条数及所有记录中的最早起始时间和最晚结束时间。
例如,该目录中有两个文件Test_1.txt和Test_2.txt,其中Test_1.txt文件内容为:
- 15696192591|15696192592|20151103 120909|20151103 201545|
- 15696192593|15696192594|20151103 110909|20151103 191545|
- 02344273522|02344273523|20160108 110909|20160109 091545|
Test_2.txt文件内容为:
- 15696192595|15696192596|20151102 120909|20151104 201545|
- 15696192597|15696192598|20151101 110909|20151103 191545|
即文件中的每条记录的格式为:呼叫号码|被呼叫号码|呼叫起始时间|呼叫结束时间|,要求生成的控制文件CtlFile.txt的内容为:
- 20151101 110909|20160109 091545|5|
即Test_1.txt和Test_2.txt两个文件中五条记录的开始时间的最小值为“20151101 110909”,结束时间的最大值为“20160109 091545”,目前共处理了5条记录。也就是说,控制文件的格式为:呼叫起始时间最小值|呼叫结束时间最大值|记录总条数|。
二、程序代码
本程序一共包括了三个代码文件:main.c、CtlFileCreate.c和CtlFileCreate.h,具体代码如下:
main.c
/********************************************************************** * 版权所有 (C)2016, Zhou Zhaoxiong。 * * 文件名称:CtlFileCreate.c * 文件标识:无 * 内容摘要:目录中文件的读取及控制文件的生成 * 其它说明:无 * 当前版本:V1.0 * 完成日期:20160109 * **********************************************************************/ #include "CtlFileCreate.h" /********************************************************************** * 功能描述:主函数 * 输入参数:无 * 输出参数:无 * 返 回 值:无 * 其它说明:无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------- * 20160109 V1.0 Zhou Zhaoxiong 创建 ***********************************************************************/ INT32 main() { ReadCtlFile(); // 获取控制文件存放路径、控制文件全路径名及文件内容字段值 ReadSrcFileAndWriteCtlFile(); // 扫描源文件目录, 并写控制文件 return 0; }</div>
CtlFileCreate.h
/********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:CtlFileCreate.h * 文件标识:无 * 内容摘要:目录中文件的读取及控制文件的生成 * 其它说明:无 * 当前版本:V1.0 * 完成日期:20151102 * **********************************************************************/ #include <stdio.h> #include <stdlib.h> #include <string.h> #include <dirent.h> // 数据类型重定义 typedef unsigned char UINT8; typedef unsigned short int UINT16; typedef unsigned int UINT32; typedef signed int INT32; typedef unsigned char BOOL; // 参数类型 #define MML_INT8_TYPE 0 #define MML_INT16_TYPE 1 #define MML_INT32_TYPE 2 #define MML_STR_TYPE 3 #define TRUE (BOOL)1 #define FALSE (BOOL)0 // 字段最大长度 #define MAX_RET_BUF_LEN 1024 // 源文件字段结构体 typedef struct { UINT8 szSrcNumber[50]; UINT8 szDstNumber[50]; UINT8 szDataStartTime[50]; UINT8 szDataEndTime[50]; } T_SrcFileContent; // 函数声明 void Sleep(UINT32 iCountMs); void ReadCtlFile(void); void ReadSrcFileAndWriteCtlFile(void); void GetSrcFileContentAndWriteCtlFile(UINT8 *pszSrcFileName); void GetSrcFileFieldValue(UINT8 *pszContentLine, T_SrcFileContent *ptSrcFileContent); void GetCtlFileContentAndWrite(T_SrcFileContent *ptSrcFileContent, UINT8 *pszContentBuffer); BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 iContentType, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize); void RemoveLineEnd(UINT8 *pszStr); void WriteToCtlFile(UINT8 *pszContentLine);</div>
CtlFileCreate.c
/********************************************************************** * 版权所有 (C)2015, Zhou Zhaoxiong。 * * 文件名称:CtlFileCreate.c * 文件标识:无 * 内容摘要:目录中文件的读取及控制文件的生成 * 其它说明:无 * 当前版本:V1.0 * 完成日期:20151102 * **********************************************************************/ #include "CtlFileCreate.h" // 全局变量 UINT8 g_szSourceDir[500] = {0}; // 需扫描的源目录 UINT8 g_szCtlFileDir[500] = {0}; // 生成的控制文件的存放目录 UINT8 g_szSourceBakDir[500] = {0}; // 处理之后的源文件的备份目录 UINT8 g_szCtlFileName[256] = {0}; // 控制文件全路径名 UINT8 g_szDataStartTime[50] = {0}; // 所有源文件中数据记录的最早开始时间 UINT8 g_szDataEndTime[50] = {0}; // 所有源文件中数据记录的最晚结束时间 UINT32 g_iRecordsSum = 0; // 已处理的记录的总条数 /********************************************************************** * 功能描述: 读取控制文件中的开始时间、结束时间和记录条数 * 输入参数: 无 * 输出参数: 无 * 返 回 值: 无 * 其它说明: 无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------ * 20151102 V1.0 Zhou Zhaoxiong 创建 ********************************************************************/ void ReadCtlFile(void) { UINT8 *pszHomePath = NULL; FILE *fpCtlFile = NULL; UINT8 szBuf[500] = {0}; // 读取控制文件中的开始时间、结束时间和记录条数, 如果是当天程序重启, 则记录条数继续编号 pszHomePath = getenv("HOME"); if (pszHomePath == NULL) { return; } snprintf(g_szCtlFileDir, sizeof(g_szCtlFileDir)-1, "%s/zhouzhaoxiong/zzx/CtlFileCreate/CtlFile", pszHomePath); // 控制文件存放目录 snprintf(g_szCtlFileName, sizeof(g_szCtlFileName)-1, "%s/CtlFile.txt", g_szCtlFileDir); // 控制文件全路径名 fpCtlFile = fopen(g_szCtlFileName, "r"); if (fpCtlFile != NULL) { fgets(szBuf, sizeof(szBuf), fpCtlFile); // 获取开始时间g_szDataStartTime if (TRUE != GetValueFromStr(1, MML_STR_TYPE, szBuf, g_szDataStartTime, '|', sizeof(g_szDataStartTime))) { printf("ReadCtlFile: exec GetValueFromStr to get g_szDataStartTime failed!\n"); return; } // 获取结束时间g_szDataEndTime if (TRUE != GetValueFromStr(2, MML_STR_TYPE, szBuf, g_szDataEndTime, '|', sizeof(g_szDataEndTime))) { printf("ReadCtlFile: exec GetValueFromStr to get g_szDataEndTime failed!\n"); return; } // 获取记录条数g_iRecordsSum if (TRUE != GetValueFromStr(3, MML_INT32_TYPE, szBuf, (UINT8 *)&g_iRecordsSum, '|', sizeof(g_iRecordsSum))) { printf("ReadCtlFile: exec GetValueFromStr to get g_iRecordsSum failed!\n"); return; } fclose(fpCtlFile); fpCtlFile = NULL; printf("ReadCtlFile: DataStartTime=%s, DataEndTime=%s, RecordsSum=%d\n", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum); } } /********************************************************************** * 功能描述: 扫描源文件目录, 并写控制文件 * 输入参数: 无 * 输出参数: 无 * 返 回 值: 无 * 其它说明: 无 * 修改日期 版本号 修改人 修改内容 * ------------------------------------------------------------------ * 20151102 V1.0 Zhou Zhaoxiong 创建 ********************************************************************/ void ReadSrcFileAndWriteCt