Linux下控制(统计)文件的生成的C代码实现

需求描述

成都创新互联-专业网站定制、快速模板网站建设、高性价比上城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式上城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖上城地区。费用合理售后完善,十多年实体公司更值得信赖。

不定时地在Linux机器下的某目录中放入文件,文件内容中包含了用户号码、起止时间等字段,现要求编写一程序来统计目前该目录中所有文件中的记录总条数及所有记录中的最早起始时间和最晚结束时间。

例如,该目录中有两个文件Test_1.txt和Test_2.txt,其中Test_1.txt文件内容为:

 
 
  1. 15696192591|15696192592|20151103 120909|20151103 201545| 
  2. 15696192593|15696192594|20151103 110909|20151103 191545| 
  3. 02344273522|02344273523|20160108 110909|20160109 091545|

Test_2.txt文件内容为:

 
 
  1. 15696192595|15696192596|20151102 120909|20151104 201545| 
  2. 15696192597|15696192598|20151101 110909|20151103 191545|

即文件中的每条记录的格式为:呼叫号码|被呼叫号码|呼叫起始时间|呼叫结束时间|,要求生成的控制文件CtlFile.txt的内容为:

 
 
  1. 20151101 110909|20160109 091545|5|

即Test_1.txt和Test_2.txt两个文件中五条记录的开始时间的最小值为“20151101 110909”,结束时间的***值为“20160109 091545”,目前共处理了5条记录。也就是说,控制文件的格式为:呼叫起始时间最小值|呼叫结束时间***值|记录总条数|。

程序代码

本程序一共包括了三个代码文件:main.c、CtlFileCreate.c和CtlFileCreate.h,具体代码如下:

main.c

 
 
  1. /**********************************************************************
  2. * 版权所有 (C)2016, Zhou Zhaoxiong。
  3. *
  4. * 文件名称:CtlFileCreate.c
  5. * 文件标识:无
  6. * 内容摘要:目录中文件的读取及控制文件的生成
  7. * 其它说明:无
  8. * 当前版本:V1.0
  9. * 作    者:Zhou Zhaoxiong
  10. * 完成日期:20160109
  11. *
  12. **********************************************************************/
  13. #include "CtlFileCreate.h"
  14. /**********************************************************************
  15. * 功能描述:主函数
  16. * 输入参数:无
  17. * 输出参数:无
  18. * 返 回 值:无
  19. * 其它说明:无
  20. * 修改日期        版本号      修改人            修改内容
  21. * -------------------------------------------------------------------
  22. * 20160109        V1.0     Zhou Zhaoxiong        创建
  23. ***********************************************************************/
  24. INT32 main()
  25. {
  26.     ReadCtlFile();    // 获取控制文件存放路径、控制文件全路径名及文件内容字段值
  27.     ReadSrcFileAndWriteCtlFile();    // 扫描源文件目录, 并写控制文件
  28.     return 0;
  29. }

CtlFileCreate.h

 
 
  1. /**********************************************************************
  2. * 版权所有 (C)2015, Zhou Zhaoxiong。
  3. *
  4. * 文件名称:CtlFileCreate.h
  5. * 文件标识:无
  6. * 内容摘要:目录中文件的读取及控制文件的生成
  7. * 其它说明:无
  8. * 当前版本:V1.0
  9. * 作    者:Zhou Zhaoxiong
  10. * 完成日期:20151102
  11. *
  12. **********************************************************************/
  13. #include 
  14. #include 
  15. #include 
  16. #include 
  17. // 数据类型重定义
  18. typedef unsigned char       UINT8;
  19. typedef unsigned short int  UINT16;
  20. typedef unsigned int        UINT32;
  21. typedef signed   int        INT32;
  22. typedef unsigned char       BOOL;
  23. // 参数类型
  24. #define MML_INT8_TYPE       0
  25. #define MML_INT16_TYPE      1
  26. #define MML_INT32_TYPE      2
  27. #define MML_STR_TYPE        3
  28. #define  TRUE         (BOOL)1
  29. #define  FALSE        (BOOL)0
  30. // 字段***长度
  31. #define MAX_RET_BUF_LEN     1024
  32. // 源文件字段结构体
  33. typedef struct
  34. {
  35.     UINT8 szSrcNumber[50];
  36.     UINT8 szDstNumber[50];
  37.     UINT8 szDataStartTime[50]; 
  38.     UINT8 szDataEndTime[50]; 
  39. } T_SrcFileContent;
  40. // 函数声明
  41. void Sleep(UINT32 iCountMs);
  42. void ReadCtlFile(void);
  43. void ReadSrcFileAndWriteCtlFile(void);
  44. void GetSrcFileContentAndWriteCtlFile(UINT8 *pszSrcFileName);
  45. void GetSrcFileFieldValue(UINT8 *pszContentLine, T_SrcFileContent *ptSrcFileContent);
  46. void GetCtlFileContentAndWrite(T_SrcFileContent *ptSrcFileContent, UINT8 *pszContentBuffer);
  47. BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 iContentType, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize);
  48. void RemoveLineEnd(UINT8 *pszStr);
  49. void WriteToCtlFile(UINT8 *pszContentLine); 

CtlFileCreate.c

 
 
  1. /**********************************************************************
  2. * 版权所有 (C)2015, Zhou Zhaoxiong。
  3. *
  4. * 文件名称:CtlFileCreate.c
  5. * 文件标识:无
  6. * 内容摘要:目录中文件的读取及控制文件的生成
  7. * 其它说明:无
  8. * 当前版本:V1.0
  9. * 作    者:Zhou Zhaoxiong
  10. * 完成日期:20151102
  11. *
  12. **********************************************************************/
  13. #include "CtlFileCreate.h"
  14. // 全局变量
  15. UINT8  g_szSourceDir[500]    = {0};         // 需扫描的源目录
  16. UINT8  g_szCtlFileDir[500]   = {0};         // 生成的控制文件的存放目录
  17. UINT8  g_szSourceBakDir[500] = {0};         // 处理之后的源文件的备份目录
  18. UINT8  g_szCtlFileName[256]  = {0};         // 控制文件全路径名
  19. UINT8  g_szDataStartTime[50] = {0};         // 所有源文件中数据记录的最早开始时间
  20. UINT8  g_szDataEndTime[50]   = {0};         // 所有源文件中数据记录的最晚结束时间
  21. UINT32 g_iRecordsSum         = 0;           // 已处理的记录的总条数
  22. /**********************************************************************
  23. * 功能描述: 读取控制文件中的开始时间、结束时间和记录条数
  24. * 输入参数: 无
  25. * 输出参数: 无
  26. * 返 回 值: 无
  27. * 其它说明: 无
  28. * 修改日期          版本号       修改人              修改内容
  29. * ------------------------------------------------------------------
  30. * 20151102          V1.0     Zhou Zhaoxiong           创建
  31. ********************************************************************/
  32. void ReadCtlFile(void)
  33. {
  34.     UINT8 *pszHomePath = NULL; 
  35.     FILE  *fpCtlFile   = NULL;
  36.     UINT8  szBuf[500]  = {0}; 
  37.     // 读取控制文件中的开始时间、结束时间和记录条数, 如果是当天程序重启, 则记录条数继续编号
  38.     pszHomePath = getenv("HOME");
  39.     if (pszHomePath == NULL)
  40.     {
  41.         return;
  42.     }
  43.     snprintf(g_szCtlFileDir, sizeof(g_szCtlFileDir)-1, "%s/zhouzhaoxiong/zzx/CtlFileCreate/CtlFile", pszHomePath);  // 控制文件存放目录
  44.     snprintf(g_szCtlFileName, sizeof(g_szCtlFileName)-1, "%s/CtlFile.txt", g_szCtlFileDir);  // 控制文件全路径名
  45.     fpCtlFile = fopen(g_szCtlFileName, "r");
  46.     if (fpCtlFile != NULL)
  47.     {
  48.         fgets(szBuf, sizeof(szBuf), fpCtlFile);
  49.         // 获取开始时间g_szDataStartTime
  50.         if (TRUE != GetValueFromStr(1, MML_STR_TYPE, szBuf, g_szDataStartTime, '|', sizeof(g_szDataStartTime)))
  51.         {
  52.             printf("ReadCtlFile: exec GetValueFromStr to get g_szDataStartTime failed!\n");
  53.             return;
  54.         }
  55.         // 获取结束时间g_szDataEndTime
  56.         if (TRUE != GetValueFromStr(2, MML_STR_TYPE, szBuf, g_szDataEndTime, '|', sizeof(g_szDataEndTime)))
  57.         {
  58.             printf("ReadCtlFile: exec GetValueFromStr to get g_szDataEndTime failed!\n");
  59.             return;
  60.         }
  61.         // 获取记录条数g_iRecordsSum
  62.         if (TRUE != GetValueFromStr(3, MML_INT32_TYPE, szBuf, (UINT8 *)&g_iRecordsSum, '|', sizeof(g_iRecordsSum)))
  63.         {
  64.             printf("ReadCtlFile: exec GetValueFromStr to get g_iRecordsSum failed!\n");
  65.             return;
  66.         }
  67.         fclose(fpCtlFile);
  68.         fpCtlFile = NULL;
  69.         printf("ReadCtlFile: DataStartTime=%s, DataEndTime=%s, RecordsSum=%d\n", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum);
  70.     }
  71. }
  72. /**********************************************************************
  73. * 功能描述: 扫描源文件目录, 并写控制文件
  74. * 输入参数: 无
  75. * 输出参数: 无
  76. * 返 回 值: 无
  77. * 其它说明: 无
  78. * 修改日期          版本号       修改人              修改内容
  79. * ------------------------------------------------------------------
  80. * 20151102          V1.0     Zhou Zhaoxiong           创建
  81. ********************************************************************/
  82. void ReadSrcFileAndWriteCtlFile(void)
  83. {
  84.     UINT8 *pszHomePath        = NULL; 
  85.     UINT8  szCommandBuf[500]  = {0}; 
  86.     UINT8  szSrcFile[500]     = {0}; 
  87.     DIR            *pDir    = NULL;
  88.     struct dirent  *pDirent = NULL;
  89.     pszHomePath = getenv("HOME");
  90.     if (pszHomePath == NULL)
  91.     {
  92.         return;
  93.     }
  94.     snprintf(g_szSourceDir,    sizeof(g_szSourceDir)-1,    "%s/zhouzhaoxiong/zzx/CtlFileCreate/SrcFile", pszHomePath);      // 源文件存放目录
  95.     snprintf(g_szSourceBakDir, sizeof(g_szSourceBakDir)-1, "%s/zhouzhaoxiong/zzx/CtlFileCreate/SrcFile_bak", pszHomePath);  // 源文件备份目录
  96.     while (1)
  97.     {   
  98.         pDir = opendir(g_szSourceDir);
  99.         if (NULL == pDir)
  100.         {
  101.             printf("ReadSrcFileAndWriteCtlFile: pDir is NULL!\n");
  102.             continue;
  103.         }
  104.         while ((pDirent = readdir(pDir)) != NULL)    // 扫描源目录, 获取文件名
  105.         {
  106.             if (strncmp(pDirent->d_name, "Test_", strlen("Test_")) == 0)      // 如果匹配上了源文件的前缀, 则读取文件内容并写控制文件
  107.             {
  108.                 memset(szSrcFile, 0x00, sizeof(szSrcFile));
  109.                 snprintf(szSrcFile, sizeof(szSrcFile)-1, "%s/%s", g_szSourceDir, pDirent->d_name, g_szSourceBakDir);
  110.                 GetSrcFileContentAndWriteCtlFile(szSrcFile);     // 获取源文件中的内容, 并写控制文件
  111.                 // 处理完成之后, 将文件剪切到备份目录中
  112.                 memset(szCommandBuf, 0x00, sizeof(szCommandBuf));
  113.                 snprintf(szCommandBuf, sizeof(szCommandBuf)-1, "mv %s %s", szSrcFile, g_szSourceBakDir);
  114.                 system(szCommandBuf);
  115.                 printf("ReadSrcFileAndWriteCtlFile: now, move %s to %s\n", pDirent->d_name, g_szSourceBakDir);
  116.             }
  117.         }
  118.         closedir(pDir);
  119.         pDir = NULL;
  120.         Sleep(60 * 1000);    // 每1分钟扫描一次
  121.     }
  122. }
  123. /**********************************************************************
  124. * 功能描述: 获取源文件中的内容, 并写控制文件
  125. * 输入参数: pszSrcFileName-带路径的源文件名
  126. * 输出参数: 无
  127. * 返 回 值: 无
  128. * 其它说明: 无
  129. * 修改日期          版本号       修改人              修改内容
  130. * ------------------------------------------------------------------
  131. * 20151102          V1.0     Zhou Zhaoxiong           创建
  132. ********************************************************************/
  133. void GetSrcFileContentAndWriteCtlFile(UINT8 *pszSrcFileName)
  134. {
  135.     FILE  *fp                  = NULL;
  136.     UINT8  szContentLine[1024] = {0};
  137.     T_SrcFileContent tSrcFileContent = {0};
  138.     if (pszSrcFileName == NULL)
  139.     {
  140.         printf("GetSrcFileContentAndWriteCtlFile: pDir is NULL!\n");
  141.         return;
  142.     }
  143.     if ((fp = fopen(pszSrcFileName, "r")) == NULL)  // 只读方式打开
  144.     {
  145.         printf("GetSrcFileContentAndWriteCtlFile: open src file failed!\n");
  146.         return; 
  147.     }
  148.     else
  149.     {
  150.         while (feof(fp) == 0 && ferror(fp) == 0)
  151.         {
  152.             // 每行对应一条源文件记录
  153.             memset(szContentLine, 0x00, sizeof(szContentLine));
  154.             if (fgets(szContentLine, sizeof(szContentLine), fp) == NULL)
  155.             {
  156.                 printf("GetSrcFileContentAndWriteCtlFile: exec fgets to get line null.\n");
  157.             }
  158.             else
  159.             {
  160.                 printf("GetSrcFileContentAndWriteCtlFile: get content line: %s\n", szContentLine);
  161.             }
  162.             RemoveLineEnd(szContentLine); // 去掉字符串后面的回车换行符
  163.             if (strlen(szContentLine) == 0)   // 如果为空行, 则继续处理下一条
  164.             {
  165.                 printf("GetSrcFileContentAndWriteCtlFile: the length of ContentLine is 0, continue.\n"); 
  166.                 continue;
  167.             }
  168.             GetSrcFileFieldValue(szContentLine, &tSrcFileContent);   // 获取一条记录中各个字段的值
  169.             memset(szContentLine, 0x00, sizeof(szContentLine));
  170.             GetCtlFileContentAndWrite(&tSrcFileContent, szContentLine); // 组装写入控制文件中的内容
  171.             WriteToCtlFile(szContentLine);    // 将内容写到控制文件中
  172.         }
  173.         fclose(fp);
  174.         fp = NULL;
  175.     }
  176. }
  177. /**********************************************************************
  178. * 功能描述: 组装写入控制文件中的内容
  179. * 输入参数: ptSrcFileContent-源文件中一条记录中各个字段的值
  180. * 输出参数: pszContentBuffer-存放内容的缓存
  181. * 返 回 值: 无
  182. * 其它说明: 控制文件中记录为: DataStartTime|DataEndTime|RecordsSum|
  183. * 修改日期          版本号       修改人              修改内容
  184. * ------------------------------------------------------------------
  185. * 20151102          V1.0     Zhou Zhaoxiong           创建
  186. ********************************************************************/
  187. void GetCtlFileContentAndWrite(T_SrcFileContent *ptSrcFileContent, UINT8 *pszContentBuffer)
  188. {
  189.     UINT8  szContentLine[500] = {0};
  190.     if (ptSrcFileContent == NULL || pszContentBuffer == NULL)
  191.     {
  192.         printf("GetCtlFileContentAndWrite: ptSrcFileContent or pszContentBuffer is NULL!\n");
  193.         return;
  194.     }
  195.     // 根据值的大小对g_szDataStartTime进行赋值
  196.     if (strlen(g_szDataStartTime) == 0)   // 当天***条
  197.     {
  198.         strncpy(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime));
  199.     }
  200.     else
  201.     {
  202.         if (strncmp(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime)) > 0)  // 修改成最小时间
  203.         {
  204.             memset(g_szDataStartTime, 0x00, sizeof(g_szDataStartTime));
  205.             strncpy(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime));
  206.         }
  207.     }
  208.     // 根据值的大小对g_szDataEndTime进行赋值
  209.     if (strlen(g_szDataEndTime) == 0)   // 当天***条
  210.     {
  211.         strncpy(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime));
  212.     }
  213.     else
  214.     {
  215.         if (strncmp(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime)) < 0)  // 修改成***时间
  216.         {
  217.             memset(g_szDataEndTime, 0x00, sizeof(g_szDataEndTime));
  218.             strncpy(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime));
  219.         }
  220.     }
  221.     // 记录总条数加1
  222.     g_iRecordsSumg_iRecordsSum = g_iRecordsSum + 1;     // 当天所有记录的总条数加1
  223.     // 打印三个字段的内容
  224.     printf("GetCtlFileContentAndWrite: DataStartTime is %s, DataEndTime is %s, RecordsSum is %d\n", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum);
  225.     // 组装写到控制文件中的消息内容
  226.     snprintf(szContentLine, sizeof(szContentLine)-1, "%s|%s|%d|", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum);
  227.     printf("GetCtlFileContentAndWrite: ContentLine is %s\n", szContentLine);
  228.     strncpy(pszContentBuffer, szContentLine, strlen(szContentLine));
  229. }
  230. /**********************************************************************
  231. * 功能描述: 获取源文件中的各个字段的值
  232. * 输入参数: pszContentLine-一条记录
  233. * 输出参数: ptSrcFileContent-源文件中一条记录中各个字段的值
  234. * 返 回 值: 无
  235. * 其它说明: 源文件中每条记录的格式为: SrcNumber|DstNumber|DataStartTime|DataEndTime|
  236. * 修改日期          版本号       修改人              修改内容
  237. * ------------------------------------------------------------------
  238. * 20151102          V1.0     Zhou Zhaoxiong           创建
  239. ********************************************************************/
  240. void GetSrcFileFieldValue(UINT8 *pszContentLine, T_SrcFileContent *ptSrcFileContent)
  241. {
  242.     if (pszContentLine == NULL || ptSrcFileContent == NULL)
  243.     {
  244.         printf("GetSrcFileFieldValue: ContentLine or SrcFileContent is NULL!\n");
  245.         return;
  246.     }
  247.     // 获取源号码
  248.     if (TRUE != GetValueFromStr(1, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szSrcNumber, '|', sizeof(ptSrcFileContent->szSrcNumber)))
  249.     {
  250.         printf("GetSrcFileFieldValue: exec GetValueFromStr to get szSrcNumber failed!\n");
  251.         return;
  252.     }
  253.     // 获取目的号码
  254.     if (TRUE != GetValueFromStr(2, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDstNumber, '|', sizeof(ptSrcFileContent->szDstNumber)))
  255.     {
  256.         printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDstNumber failed!\n");
  257.         return;
  258.     }
  259.     // 获取开始时间
  260.     if (TRUE != GetValueFromStr(3, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDataStartTime, '|', sizeof(ptSrcFileContent->szDataStartTime)))
  261.     {
  262.         printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDataStartTime failed!\n");
  263.         return;
  264.     }
  265.     // 获取结束时间
  266.     if (TRUE != GetValueFromStr(4, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDataEndTime, '|', sizeof(ptSrcFileContent->szDataEndTime)))
  267.     {
  268.         printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDataEndTime failed!\n");
  269.         return;
  270.     }
  271.     printf("GetSrcFileFieldValue: SrcNumber=%s, DstNumber=%s, DataStartTime=%s, DataEndTime=%s\n", ptSrcFileContent->szSrcNumber, ptSrcFileContent->szDstNumber, 
  272.                                                                                 ptSrcFileContent->szDataStartTime, ptSrcFileContent->szDataEndTime);
  273. }
  274. /**********************************************************************
  275. * 功能描述: 程序休眠
  276. * 输入参数: iCountMs-休眠时间(单位:ms)
  277. * 输出参数: 无
  278. * 返 回 值: 无
  279. * 其它说明: 无
  280. * 修改日期          版本号       修改人              修改内容
  281. * ------------------------------------------------------------------
  282. * 20151102          V1.0     Zhou Zhaoxiong           创建
  283. ********************************************************************/
  284. void Sleep(UINT32 iCountMs)
  285. {
  286.     struct timeval t_timeout = {0};
  287.     if (iCountMs < 1000)
  288.     {
  289.         t_timeout.tv_sec = 0;
  290.         t_timeout.tv_usec = iCountMs * 1000;
  291.     }
  292.     else
  293.     {
  294.         t_timeout.tv_sec = iCountMs / 1000;
  295.         t_timeout.tv_usec = (iCountMs % 1000) * 1000;
  296.     }
  297.     select(0, NULL, NULL, NULL, &t_timeout);   // 调用select函数阻塞程序
  298. }
  299. /**********************************************************************
  300. *功能描述:获取字符串中某一个字段的值
  301. *输入参数:iSerialNum-字段编号(为正整数)
  302.            iContentType-需要获取的内容的类型
  303.            pSourceStr-源字符串
  304.            pDstStr-目的字符串(提取的值的存放位置)
  305.            cIsolater-源字符串中字段的分隔符
  306.            iDstStrSize-目的字符串的长度
  307. *输出参数:无
  308. *返 回 值:TRUE-成功  FALSE-失败
  309. *其它说明:无
  310. *修改日期        版本号            修改人         修改内容
  311. * --------------------------------------------------------------
  312. * 20151102        V1.0         Zhou Zhaoxiong       创建
  313. ***********************************************************************/
  314. BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 iContentType, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize)
  315. {
  316.     UINT8  *pStrBegin                 = NULL;
  317.     UINT8  *pStrEnd                   = NULL;
  318.     UINT8   szRetBuf[MAX_RET_BUF_LEN] = {0};     // 截取出的字符串放入该数组中
  319.     UINT8  *pUINT8                    = NULL;
  320.     UINT16 *pUINT16                   = NULL;
  321.     UINT32 *pUINT32                   = NULL;
  322.     UINT32  iFieldLen                 = 0;      // 用于表示每个字段的实际长度
  323.     if (pSourceStr == NULL)                     // 对输入指针的异常情况进行判断
  324.     {
  325.         return FALSE;
  326.     }
  327.     //字段首
  328.     pStrBegin = pSourceStr;
  329.     while (--iSerialNum != 0)
  330.     {
  331.         pStrBegin = strchr(pStrBegin, cIsolater);
  332.         if (pStrBegin == NULL)
  333.         {
  334.             return FALSE;
  335.         }
  336.         pStrBegin ++;
  337.     }
  338.     //字段尾
  339.     pStrEnd = strchr(pStrBegin, cIsolater);
  340.     if (pStrEnd == NULL)
  341.     {
  342.         return FALSE;
  343.     }
  344.     iFieldLen = (UINT16)(pStrEnd - pStrBegin);
  345.     if(iFieldLen >= MAX_RET_BUF_LEN) //进行异常保护, 防止每个字段的值过长
  346.     {
  347.         iFieldLen = MAX_RET_BUF_LEN - 1;
  348.     }
  349.     memcpy(szRetBuf, pStrBegin, iFieldLen);
  350.     //将需要的字段值放到pDstStr中去
  351.     switch (iContentType)
  352.     {
  353.         case MML_STR_TYPE:                        //字符串类型
  354.         {
  355.             strncpy(pDstStr, szRetBuf, iDstStrSize);
  356.             break;
  357.         }
  358.         case MML_INT8_TYPE:                       //字符类型
  359.         {
  360.             pUINT8   = (UINT8 *)pDstStr;
  361.             *pDstStr = (UINT8)atoi(szRetBuf);
  362.             break;
  363.         }
  364.         case MML_INT16_TYPE:                      // short int类型
  365.         {
  366.             pUINT16  = (UINT16 *)pDstStr;
  367.             *pUINT16 = (UINT16)atoi(szRetBuf);
  368.             break;
  369.         }
  370.         case MML_INT32_TYPE:                      // int类型
  371.         {
  372.             pUINT32  = (UINT32 *)pDstStr;
  373.             *pUINT32 = (UINT32)atoi(szRetBuf);
  374.             break;
  375.         }
  376.         default:                                  // 一定要有default分支
  377.         {
  378.             return FALSE;
  379.         }
  380.     }
  381.     return TRUE;
  382. }
  383. /**********************************************************************
  384. * 功能描述: 去掉字符串后面的回车换行符
  385. * 输入参数: pszStr-输入的字符串
  386. * 输出参数: 无
  387. * 返 回 值: 无
  388. * 其它说明: 无
  389. * 修改日期          版本号       修改人              修改内容
  390. * ------------------------------------------------------------------
  391. * 20151102          V1.0     Zhou Zhaoxiong           创建
  392. ********************************************************************/
  393. void RemoveLineEnd(UINT8 *pszStr)
  394. {
  395.     UINT32  iStrLen = 0;
  396.     if (pszStr == NULL)
  397.     {
  398.         printf("RemoveLineEnd: pszStr is NULL!\n");
  399.         return;
  400.     }
  401.     iStrLen = strlen(pszStr);
  402. 网站栏目:Linux下控制(统计)文件的生成的C代码实现
    文章网址:http://www.csdahua.cn/qtweb/news25/45075.html

    网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

    广告

    声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网