亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁(yè) > 編程 > C++ > 正文

Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn)

2020-05-23 14:10:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
這篇文章主要介紹了Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn),感興趣的小伙伴們可以參考一下
 

本文分享了Linux下控制(統(tǒng)計(jì))文件的生成的C代碼實(shí)現(xiàn)案例,供大家參考,具體內(nèi)容如下

一、需求描述 
不定時(shí)地在Linux機(jī)器下的某目錄中放入文件,文件內(nèi)容中包含了用戶號(hào)碼、起止時(shí)間等字段,現(xiàn)要求編寫一程序來(lái)統(tǒng)計(jì)目前該目錄中所有文件中的記錄總條數(shù)及所有記錄中的最早起始時(shí)間和最晚結(jié)束時(shí)間。

例如,該目錄中有兩個(gè)文件Test_1.txt和Test_2.txt,其中Test_1.txt文件內(nèi)容為:

  • 15696192591|15696192592|20151103 120909|20151103 201545| 
  • 15696192593|15696192594|20151103 110909|20151103 191545| 
  • 02344273522|02344273523|20160108 110909|20160109 091545|

Test_2.txt文件內(nèi)容為:

  • 15696192595|15696192596|20151102 120909|20151104 201545| 
  • 15696192597|15696192598|20151101 110909|20151103 191545|

即文件中的每條記錄的格式為:呼叫號(hào)碼|被呼叫號(hào)碼|呼叫起始時(shí)間|呼叫結(jié)束時(shí)間|,要求生成的控制文件CtlFile.txt的內(nèi)容為:

  • 20151101 110909|20160109 091545|5|

即Test_1.txt和Test_2.txt兩個(gè)文件中五條記錄的開始時(shí)間的最小值為“20151101 110909”,結(jié)束時(shí)間的最大值為“20160109 091545”,目前共處理了5條記錄。也就是說(shuō),控制文件的格式為:呼叫起始時(shí)間最小值|呼叫結(jié)束時(shí)間最大值|記錄總條數(shù)|。

二、程序代碼 
本程序一共包括了三個(gè)代碼文件:main.c、CtlFileCreate.c和CtlFileCreate.h,具體代碼如下: 

main.c

/*********************************************************************** 版權(quán)所有 (C)2016, Zhou Zhaoxiong。** 文件名稱:CtlFileCreate.c* 文件標(biāo)識(shí):無(wú)* 內(nèi)容摘要:目錄中文件的讀取及控制文件的生成* 其它說(shuō)明:無(wú)* 當(dāng)前版本:V1.0* 完成日期:20160109***********************************************************************/#include "CtlFileCreate.h"/*********************************************************************** 功能描述:主函數(shù)* 輸入?yún)?shù):無(wú)* 輸出參數(shù):無(wú)* 返 回 值:無(wú)* 其它說(shuō)明:無(wú)* 修改日期    版本號(hào)   修改人      修改內(nèi)容* -------------------------------------------------------------------* 20160109    V1.0   Zhou Zhaoxiong    創(chuàng)建***********************************************************************/INT32 main(){  ReadCtlFile();  // 獲取控制文件存放路徑、控制文件全路徑名及文件內(nèi)容字段值  ReadSrcFileAndWriteCtlFile();  // 掃描源文件目錄, 并寫控制文件  return 0;}

CtlFileCreate.h

/*********************************************************************** 版權(quán)所有 (C)2015, Zhou Zhaoxiong。** 文件名稱:CtlFileCreate.h* 文件標(biāo)識(shí):無(wú)* 內(nèi)容摘要:目錄中文件的讀取及控制文件的生成* 其它說(shuō)明:無(wú)* 當(dāng)前版本:V1.0* 完成日期:20151102***********************************************************************/#include <stdio.h>#include <stdlib.h>#include <string.h>#include <dirent.h>// 數(shù)據(jù)類型重定義typedef unsigned char    UINT8;typedef unsigned short int UINT16;typedef unsigned int    UINT32;typedef signed  int    INT32;typedef unsigned char    BOOL;// 參數(shù)類型#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// 字段最大長(zhǎng)度#define MAX_RET_BUF_LEN   1024// 源文件字段結(jié)構(gòu)體typedef struct{  UINT8 szSrcNumber[50];  UINT8 szDstNumber[50];  UINT8 szDataStartTime[50];   UINT8 szDataEndTime[50]; } T_SrcFileContent;// 函數(shù)聲明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);

CtlFileCreate.c

/*********************************************************************** 版權(quán)所有 (C)2015, Zhou Zhaoxiong。** 文件名稱:CtlFileCreate.c* 文件標(biāo)識(shí):無(wú)* 內(nèi)容摘要:目錄中文件的讀取及控制文件的生成* 其它說(shuō)明:無(wú)* 當(dāng)前版本: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};     // 所有源文件中數(shù)據(jù)記錄的最早開始時(shí)間UINT8 g_szDataEndTime[50]  = {0};     // 所有源文件中數(shù)據(jù)記錄的最晚結(jié)束時(shí)間UINT32 g_iRecordsSum     = 0;      // 已處理的記錄的總條數(shù)/*********************************************************************** 功能描述: 讀取控制文件中的開始時(shí)間、結(jié)束時(shí)間和記錄條數(shù)* 輸入?yún)?shù): 無(wú)* 輸出參數(shù): 無(wú)* 返 回 值: 無(wú)* 其它說(shuō)明: 無(wú)* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void ReadCtlFile(void){  UINT8 *pszHomePath = NULL;   FILE *fpCtlFile  = NULL;  UINT8 szBuf[500] = {0};   // 讀取控制文件中的開始時(shí)間、結(jié)束時(shí)間和記錄條數(shù), 如果是當(dāng)天程序重啟, 則記錄條數(shù)繼續(xù)編號(hào)  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);    // 獲取開始時(shí)間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;    }    // 獲取結(jié)束時(shí)間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;    }    // 獲取記錄條數(shù)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);  }}/*********************************************************************** 功能描述: 掃描源文件目錄, 并寫控制文件* 輸入?yún)?shù): 無(wú)* 輸出參數(shù): 無(wú)* 返 回 值: 無(wú)* 其它說(shuō)明: 無(wú)* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void ReadSrcFileAndWriteCtlFile(void){  UINT8 *pszHomePath    = NULL;   UINT8 szCommandBuf[500] = {0};   UINT8 szSrcFile[500]   = {0};   DIR      *pDir  = NULL;  struct dirent *pDirent = NULL;  pszHomePath = getenv("HOME");  if (pszHomePath == NULL)  {    return;  }  snprintf(g_szSourceDir,  sizeof(g_szSourceDir)-1,  "%s/zhouzhaoxiong/zzx/CtlFileCreate/SrcFile", pszHomePath);   // 源文件存放目錄  snprintf(g_szSourceBakDir, sizeof(g_szSourceBakDir)-1, "%s/zhouzhaoxiong/zzx/CtlFileCreate/SrcFile_bak", pszHomePath); // 源文件備份目錄  while (1)  {      pDir = opendir(g_szSourceDir);    if (NULL == pDir)    {      printf("ReadSrcFileAndWriteCtlFile: pDir is NULL!/n");      continue;    }    while ((pDirent = readdir(pDir)) != NULL)  // 掃描源目錄, 獲取文件名    {      if (strncmp(pDirent->d_name, "Test_", strlen("Test_")) == 0)   // 如果匹配上了源文件的前綴, 則讀取文件內(nèi)容并寫控制文件      {        memset(szSrcFile, 0x00, sizeof(szSrcFile));        snprintf(szSrcFile, sizeof(szSrcFile)-1, "%s/%s", g_szSourceDir, pDirent->d_name, g_szSourceBakDir);        GetSrcFileContentAndWriteCtlFile(szSrcFile);   // 獲取源文件中的內(nèi)容, 并寫控制文件        // 處理完成之后, 將文件剪切到備份目錄中        memset(szCommandBuf, 0x00, sizeof(szCommandBuf));        snprintf(szCommandBuf, sizeof(szCommandBuf)-1, "mv %s %s", szSrcFile, g_szSourceBakDir);        system(szCommandBuf);        printf("ReadSrcFileAndWriteCtlFile: now, move %s to %s/n", pDirent->d_name, g_szSourceBakDir);      }    }    closedir(pDir);    pDir = NULL;    Sleep(60 * 1000);  // 每1分鐘掃描一次  }}/*********************************************************************** 功能描述: 獲取源文件中的內(nèi)容, 并寫控制文件* 輸入?yún)?shù): pszSrcFileName-帶路徑的源文件名* 輸出參數(shù): 無(wú)* 返 回 值: 無(wú)* 其它說(shuō)明: 無(wú)* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void GetSrcFileContentAndWriteCtlFile(UINT8 *pszSrcFileName){  FILE *fp         = NULL;  UINT8 szContentLine[1024] = {0};  T_SrcFileContent tSrcFileContent = {0};  if (pszSrcFileName == NULL)  {    printf("GetSrcFileContentAndWriteCtlFile: pDir is NULL!/n");    return;  }  if ((fp = fopen(pszSrcFileName, "r")) == NULL) // 只讀方式打開  {    printf("GetSrcFileContentAndWriteCtlFile: open src file failed!/n");    return;   }  else  {    while (feof(fp) == 0 && ferror(fp) == 0)    {      // 每行對(duì)應(yīng)一條源文件記錄      memset(szContentLine, 0x00, sizeof(szContentLine));      if (fgets(szContentLine, sizeof(szContentLine), fp) == NULL)      {        printf("GetSrcFileContentAndWriteCtlFile: exec fgets to get line null./n");      }      else      {        printf("GetSrcFileContentAndWriteCtlFile: get content line: %s/n", szContentLine);      }      RemoveLineEnd(szContentLine); // 去掉字符串后面的回車換行符      if (strlen(szContentLine) == 0)  // 如果為空行, 則繼續(xù)處理下一條      {        printf("GetSrcFileContentAndWriteCtlFile: the length of ContentLine is 0, continue./n");         continue;      }      GetSrcFileFieldValue(szContentLine, &tSrcFileContent);  // 獲取一條記錄中各個(gè)字段的值      memset(szContentLine, 0x00, sizeof(szContentLine));      GetCtlFileContentAndWrite(&tSrcFileContent, szContentLine); // 組裝寫入控制文件中的內(nèi)容      WriteToCtlFile(szContentLine);  // 將內(nèi)容寫到控制文件中    }    fclose(fp);    fp = NULL;  }}/*********************************************************************** 功能描述: 組裝寫入控制文件中的內(nèi)容* 輸入?yún)?shù): ptSrcFileContent-源文件中一條記錄中各個(gè)字段的值* 輸出參數(shù): pszContentBuffer-存放內(nèi)容的緩存* 返 回 值: 無(wú)* 其它說(shuō)明: 控制文件中記錄為: DataStartTime|DataEndTime|RecordsSum|* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void GetCtlFileContentAndWrite(T_SrcFileContent *ptSrcFileContent, UINT8 *pszContentBuffer){  UINT8 szContentLine[500] = {0};  if (ptSrcFileContent == NULL || pszContentBuffer == NULL)  {    printf("GetCtlFileContentAndWrite: ptSrcFileContent or pszContentBuffer is NULL!/n");    return;  }  // 根據(jù)值的大小對(duì)g_szDataStartTime進(jìn)行賦值  if (strlen(g_szDataStartTime) == 0)  // 當(dāng)天第一條  {    strncpy(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime));  }  else  {    if (strncmp(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime)) > 0) // 修改成最小時(shí)間    {      memset(g_szDataStartTime, 0x00, sizeof(g_szDataStartTime));      strncpy(g_szDataStartTime, ptSrcFileContent->szDataStartTime, strlen(ptSrcFileContent->szDataStartTime));    }  }  // 根據(jù)值的大小對(duì)g_szDataEndTime進(jìn)行賦值  if (strlen(g_szDataEndTime) == 0)  // 當(dāng)天第一條  {    strncpy(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime));  }  else  {    if (strncmp(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime)) < 0) // 修改成最大時(shí)間    {      memset(g_szDataEndTime, 0x00, sizeof(g_szDataEndTime));      strncpy(g_szDataEndTime, ptSrcFileContent->szDataEndTime, strlen(ptSrcFileContent->szDataEndTime));    }  }  // 記錄總條數(shù)加1  g_iRecordsSum = g_iRecordsSum + 1;   // 當(dāng)天所有記錄的總條數(shù)加1  // 打印三個(gè)字段的內(nèi)容  printf("GetCtlFileContentAndWrite: DataStartTime is %s, DataEndTime is %s, RecordsSum is %d/n", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum);  // 組裝寫到控制文件中的消息內(nèi)容  snprintf(szContentLine, sizeof(szContentLine)-1, "%s|%s|%d|", g_szDataStartTime, g_szDataEndTime, g_iRecordsSum);  printf("GetCtlFileContentAndWrite: ContentLine is %s/n", szContentLine);  strncpy(pszContentBuffer, szContentLine, strlen(szContentLine));}/*********************************************************************** 功能描述: 獲取源文件中的各個(gè)字段的值* 輸入?yún)?shù): pszContentLine-一條記錄* 輸出參數(shù): ptSrcFileContent-源文件中一條記錄中各個(gè)字段的值* 返 回 值: 無(wú)* 其它說(shuō)明: 源文件中每條記錄的格式為: SrcNumber|DstNumber|DataStartTime|DataEndTime|* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void GetSrcFileFieldValue(UINT8 *pszContentLine, T_SrcFileContent *ptSrcFileContent){  if (pszContentLine == NULL || ptSrcFileContent == NULL)  {    printf("GetSrcFileFieldValue: ContentLine or SrcFileContent is NULL!/n");    return;  }  // 獲取源號(hào)碼  if (TRUE != GetValueFromStr(1, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szSrcNumber, '|', sizeof(ptSrcFileContent->szSrcNumber)))  {    printf("GetSrcFileFieldValue: exec GetValueFromStr to get szSrcNumber failed!/n");    return;  }  // 獲取目的號(hào)碼  if (TRUE != GetValueFromStr(2, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDstNumber, '|', sizeof(ptSrcFileContent->szDstNumber)))  {    printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDstNumber failed!/n");    return;  }  // 獲取開始時(shí)間  if (TRUE != GetValueFromStr(3, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDataStartTime, '|', sizeof(ptSrcFileContent->szDataStartTime)))  {    printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDataStartTime failed!/n");    return;  }  // 獲取結(jié)束時(shí)間  if (TRUE != GetValueFromStr(4, MML_STR_TYPE, pszContentLine, ptSrcFileContent->szDataEndTime, '|', sizeof(ptSrcFileContent->szDataEndTime)))  {    printf("GetSrcFileFieldValue: exec GetValueFromStr to get szDataEndTime failed!/n");    return;  }  printf("GetSrcFileFieldValue: SrcNumber=%s, DstNumber=%s, DataStartTime=%s, DataEndTime=%s/n", ptSrcFileContent->szSrcNumber, ptSrcFileContent->szDstNumber,                                         ptSrcFileContent->szDataStartTime, ptSrcFileContent->szDataEndTime);}/*********************************************************************** 功能描述: 程序休眠* 輸入?yún)?shù): iCountMs-休眠時(shí)間(單位:ms)* 輸出參數(shù): 無(wú)* 返 回 值: 無(wú)* 其它說(shuō)明: 無(wú)* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void Sleep(UINT32 iCountMs){  struct timeval t_timeout = {0};  if (iCountMs < 1000)  {    t_timeout.tv_sec = 0;    t_timeout.tv_usec = iCountMs * 1000;  }  else  {    t_timeout.tv_sec = iCountMs / 1000;    t_timeout.tv_usec = (iCountMs % 1000) * 1000;  }  select(0, NULL, NULL, NULL, &t_timeout);  // 調(diào)用select函數(shù)阻塞程序}/***********************************************************************功能描述:獲取字符串中某一個(gè)字段的值*輸入?yún)?shù):iSerialNum-字段編號(hào)(為正整數(shù))      iContentType-需要獲取的內(nèi)容的類型      pSourceStr-源字符串      pDstStr-目的字符串(提取的值的存放位置)      cIsolater-源字符串中字段的分隔符      iDstStrSize-目的字符串的長(zhǎng)度*輸出參數(shù):無(wú)*返 回 值:TRUE-成功 FALSE-失敗*其它說(shuō)明:無(wú)*修改日期    版本號(hào)      修改人     修改內(nèi)容* --------------------------------------------------------------* 20151102    V1.0     Zhou Zhaoxiong    創(chuàng)建***********************************************************************/BOOL GetValueFromStr(UINT16 iSerialNum, UINT8 iContentType, UINT8 *pSourceStr, UINT8 *pDstStr, UINT8 cIsolater, UINT32 iDstStrSize){  UINT8 *pStrBegin         = NULL;  UINT8 *pStrEnd          = NULL;  UINT8  szRetBuf[MAX_RET_BUF_LEN] = {0};   // 截取出的字符串放入該數(shù)組中  UINT8 *pUINT8          = NULL;  UINT16 *pUINT16          = NULL;  UINT32 *pUINT32          = NULL;  UINT32 iFieldLen         = 0;   // 用于表示每個(gè)字段的實(shí)際長(zhǎng)度  if (pSourceStr == NULL)           // 對(duì)輸入指針的異常情況進(jìn)行判斷  {    return FALSE;  }  //字段首  pStrBegin = pSourceStr;  while (--iSerialNum != 0)  {    pStrBegin = strchr(pStrBegin, cIsolater);    if (pStrBegin == NULL)    {      return FALSE;    }    pStrBegin ++;  }  //字段尾  pStrEnd = strchr(pStrBegin, cIsolater);  if (pStrEnd == NULL)  {    return FALSE;  }  iFieldLen = (UINT16)(pStrEnd - pStrBegin);  if(iFieldLen >= MAX_RET_BUF_LEN) //進(jìn)行異常保護(hù), 防止每個(gè)字段的值過(guò)長(zhǎng)  {    iFieldLen = MAX_RET_BUF_LEN - 1;  }  memcpy(szRetBuf, pStrBegin, iFieldLen);  //將需要的字段值放到pDstStr中去  switch (iContentType)  {    case MML_STR_TYPE:            //字符串類型    {      strncpy(pDstStr, szRetBuf, iDstStrSize);      break;    }    case MML_INT8_TYPE:            //字符類型    {      pUINT8  = (UINT8 *)pDstStr;      *pDstStr = (UINT8)atoi(szRetBuf);      break;    }    case MML_INT16_TYPE:           // short int類型    {      pUINT16 = (UINT16 *)pDstStr;      *pUINT16 = (UINT16)atoi(szRetBuf);      break;    }    case MML_INT32_TYPE:           // int類型    {      pUINT32 = (UINT32 *)pDstStr;      *pUINT32 = (UINT32)atoi(szRetBuf);      break;    }    default:                 // 一定要有default分支    {      return FALSE;    }  }  return TRUE;}/*********************************************************************** 功能描述: 去掉字符串后面的回車換行符* 輸入?yún)?shù): pszStr-輸入的字符串* 輸出參數(shù): 無(wú)* 返 回 值: 無(wú)* 其它說(shuō)明: 無(wú)* 修改日期     版本號(hào)    修改人       修改內(nèi)容* ------------------------------------------------------------------* 20151102     V1.0   Zhou Zhaoxiong      創(chuàng)建********************************************************************/void RemoveLineEnd(UINT8 *pszStr){  UINT32 iStrLen = 0;  if (pszStr == NULL)  {    printf("RemoveLineEnd: pszStr is NULL!/n");    return;  }  iStrLen = strlen(pszStr);  while (iStrLen > 0)  {    if (pszStr[iStrLen-1] == '/n' || pszStr[iStrLen-1] == '/r')    {      pszStr[iStrLen-1] = '/0';    }    else    {      break;    }    iStrLen --;  }  return;}/********************************************************************** * 功能描述: 把內(nèi)容寫到控制文件中 * 輸入?yún)?shù): pszContentLine-一條文件記錄 * 輸出參數(shù): 無(wú) * 返 回 值: 無(wú) * 其它說(shuō)明: 無(wú) * 修改日期    版本號(hào)   修改人      修改內(nèi)容 * ------------------------------------------------------ * 20151103    V1.0   Zhou Zhaoxiong    創(chuàng)建 ***********************************************************************/void WriteToCtlFile(UINT8 *pszContentLine){  FILE *fpCtlFile = NULL;  if (pszContentLine == NULL)  {    printf("WriteToCtlFile: pszContentLine is NULL./n");    return;  }  fpCtlFile = fopen(g_szCtlFileName, "w");  if (fpCtlFile != NULL)  {    fputs(pszContentLine, fpCtlFile);    fclose(fpCtlFile);    fpCtlFile = NULL;    printf("WriteToCtlFile: write ctl file successfully! file=%s, content=%s/n", g_szCtlFileName, pszContentLine);  }  else  {    printf("WriteToCtlFile: write ctl file failed! file=%s, content=%s/n", g_szCtlFileName, pszContentLine);  }}

三、程序編譯及運(yùn)行 
將程序代碼上傳到Linux機(jī)器上,并在當(dāng)前用戶的zhouzhaoxiong/zzx/CtlFileCreate/SrcFile目錄下上傳一些滿足命名規(guī)范的源文件,然后使用“gcc -g -o CtlFileCreate main.c CtlFileCreate.c”命令對(duì)程序進(jìn)行編譯,生成“CtlFileCreate”文件;接著運(yùn)行“CtlFileCreate”命令,可以看到在當(dāng)前用戶的zhouzhaoxiong/zzx/CtlFileCreate/CtlFile目錄下有控制文件生成,在當(dāng)前用戶的zhouzhaoxiong/zzx/CtlFileCreate/SrcFile_bak目錄下有源文件的備份文件生成。

查看控制文件內(nèi)容,里面記錄的就是當(dāng)前所處理的所有文件中的記錄總條數(shù)及所有記錄中的呼叫起始時(shí)間最小值和呼叫結(jié)束時(shí)間最大值。

四、程序說(shuō)明 
第一,為了便于說(shuō)明,在本程序中,源文件的前綴是“Test_”,控制文件命名為“CtlFile.txt”。在實(shí)際的開發(fā)中,大家完全可以通過(guò)配置項(xiàng)來(lái)決定源文件及控制文件的命名規(guī)則。

第二,為了防止源文件被重復(fù)處理,當(dāng)某個(gè)源文件處理完成之后,會(huì)被剪切到備份目錄中。這樣做也是為了方便之后校對(duì)控制文件中的內(nèi)容。

第三,在讀取文件中的第一條記錄時(shí),將該條記錄中的呼叫起始時(shí)間和呼叫結(jié)束時(shí)間分別存放到兩個(gè)全局變量中,并按照格式寫控制文件;在讀取該文件中的其他記錄時(shí),首先將該條記錄中的呼叫起始時(shí)間和呼叫結(jié)束時(shí)間與全局變量進(jìn)行比較,確保全局變量中存放的是呼叫起始時(shí)間最小值和呼叫結(jié)束時(shí)間最大值,記錄總條數(shù)加1,并將新的記錄內(nèi)容寫入到控制文件中。

第四,在處理完當(dāng)前目錄下的所有文件之后,程序會(huì)休眠一段時(shí)間,然后繼續(xù)掃描目錄。在實(shí)際的開發(fā)中,休眠間隔也是可以配置的。

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助。



發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
波多野结衣一本一道| 黑丝美女久久久| 亚洲国产中文在线| 97人人模人人爽人人澡| 欧美精品电影| 欧美精品久久久久久久小说| 国产精品一二三四区| 91福利社在线观看| 香蕉视频黄在线观看| 亚洲人成伊人成综合网久久久| 成年人国产精品| 人妻人人澡人人添人人爽| 欧美成人免费全部观看天天性色| 国产精品视频一区二区三| 亚洲欧美日韩精品久久奇米色影视| 国产伦精品一区二区三区精品| 国产免费大片| 中文字幕综合在线| 亚洲精品一区二区三区影院忠贞| 中文文字幕一区二区三三| 亚洲午夜免费福利视频| 日韩激情在线播放| 亚洲国产一区二区三区在线观看| 婷婷开心激情综合| 极品少妇xxxx精品少妇偷拍| 狠狠色伊人亚洲综合网站色| 亚洲欧美日韩国产另类专区| 人妻丰满熟妇av无码区app| 91视视频在线观看入口直接观看www| 欧美三级韩国三级日本一级| 亚洲色精品三区二区一区| 欧美高清视频看片在线观看| 久久久久久久久久久福利| 欧美视频专区一二在线观看| 午夜精品小视频| 亚洲第一精品在线观看| 狠狠爱免费视频| 蜜桃视频在线观看免费视频网站www| 国产精品传媒毛片三区| 小舞被吸乳羞羞网站视频| 不卡的av中文字幕| 国产精品蜜臀在线观看| 日韩一区精品字幕| 欧美日韩国产成人在线观看| 亚洲一级片免费观看| 国产情侣免费视频| 久久这里只有精品一区二区| 午夜精品电影在线观看| 欧美va亚洲va日韩∨a综合色| 国产精品美乳一区二区免费| 澳门黄色一级片| 中文在线资源| 欧美激情中文字幕一区二区| 久艹在线免费观看| 中文字幕亚洲欧美在线不卡| 337p粉嫩大胆噜噜噜鲁| 人人澡人人透人人爽| 欧美日韩另类丝袜其他| 亚洲一级特黄毛片| 亚洲一区二区国产| 欧美日韩日日摸| caopon在线免费视频| 岛国av一区二区三区| 在线视频一区二区免费| japanese国产| 你懂的视频在线观看资源| 天堂在线视频中文网| 任你操精品视频| 狠狠色综合色区| 欧美高清视频www夜色资源网| 久久国产精品99久久人人澡| 91精品国产欧美日韩| 福利精品一区| 国产自偷自偷免费一区| 国产亚av手机在线观看| 538国产精品视频一区二区| 91精品国产欧美日韩| 色欧美激情视频在线| 在线观看的av网站| 曰皮视频在线播放免费的| 欧美韩国一区二区| 欧美日韩中文字幕一区二区| 欧美性受xxxx黒人xyx性爽| 国产一区二区三区美女| 国产色在线播放| 国产一区二区导航在线播放| 91成人理论电影| 91丝袜呻吟高潮美腿白嫩在线观看| 精品国产自在久精品国产| 9l国产精品久久久久麻豆| 在线观看中文字幕亚洲| 高跟丝袜一区二区三区| 久久久女人电视剧免费播放下载| 中国china体内裑精亚洲片| 免费超爽大片黄| 国外亚洲成av人片在线观看| 天天艹天天操| 日韩你懂的在线播放| 久久久久成人黄色影片| 日韩视频国产视频| 亚洲午夜无码av毛片久久| av在线天堂播放| 亚洲女人久久久| 三上悠亚在线观看二区| 噜噜爱69成人精品| 中文在线资源| 欧美乱妇23p| 久久夜色撩人精品| 少妇精品视频一区二区免费看| 欧美成年黄网站色视频| 特级西西人体4444xxxx| 色久视频在线观看| 伊人免费在线观看高清版| 日本美女久久| 日本年轻的继坶中文字幕| 你懂的免费视频| 91精品在线视频观看| 日韩视频免费大全中文字幕| 国产一级片中文字幕| 久久综合中文字幕| av电影在线播放高清免费观看| 在线视频观看亚洲| 国产网站一区二区| 日本精品一二区| 无码无遮挡又大又爽又黄的视频| 日本a级不卡| 日本超碰在线观看| 中文字幕 日韩有码| 成人一级毛片| 欧美区一区二区| 色哟哟在线观看一区二区三区| 丰满人妻一区二区三区大胸| 久久亚洲一区二区三区明星换脸| 国产精品www色诱视频| 亚洲毛片在线观看.| 性欧美69式xxxxx| 综合激情成人伊人| 日韩精品一区二区三区免费视频| 欧美成人午夜激情在线| 98精品视频| 中文字幕永久视频| 色噜噜久久综合| 免费国产阿v视频在线观看| 婷婷激情图片久久| 九九热这里有精品视频| 成人免费高清视频在线观看| 国产精品99久久久久久www| 亚洲成人a级网| 日韩欧美国产免费播放| 亚洲欧洲美洲一区二区三区| 亚洲一区二区三区加勒比| 免费啪视频在线观看| 国产精品人成电影| 麻豆传媒在线免费| 久久久成人的性感天堂| 色爱区综合激月婷婷| 久久久久久久久久久黄色| 亚洲成a人片77777kkkk| 欧美成人免费小视频| 日韩女在线观看| 羞羞的视频网站| 中文字幕一区二区在线播放| 国产一区二区中文字幕| 精品国偷自产在线视频99| 国模一区二区三区私拍视频| 日韩一区二区在线看| 亚洲欧美综合自拍| 精品999日本久久久影院| 成人3d精品动漫精品一二三| 青青草精品视频在线观看| 久久久久久久久久久久久9999| 在线电影看在线一区二区三区| 成人免费淫片免费观看| 日本不卡久久| 日韩一级电影| 99久久综合| 日本公妇乱淫免费视频一区三区| 国产精品99一区二区| 农村寡妇一区二区三区| 一区二区三区网站| 福利在线小视频| av中文字幕在线观看| 中文字幕一区二区三区乱码在线| 波多野结衣二区三区| 一区二区日本视频| 欧美日本网站| 免费在线观看亚洲视频| 日韩av一区二区在线影视| 久久久久观看| 在线中文字幕观看| 色欲综合视频天天天| 一区二区影院| 亚洲每日更新| 国产精品高潮呻吟久久av野狼| 欧美成年人视频在线观看| 欧美毛片免费观看| 蜜桃视频在线观看91| 欧美成人精品激情在线观看| 国产视频一区二区三区在线播放| 色老汉av一区二区三区| 韩国精品久久久999| 99在线免费观看视频| 亚洲人成电影在线播放| 亚洲图片123| 欧美精品自拍视频| 伊人在我在线看导航| 亚洲AV无码成人精品一区| 韩国欧美国产1区| 国产乱色国产精品免费视频| 婷婷激情久久| 九色综合婷婷综合| 色在线视频免费| 日本亚洲色大成网站www久久| 国产精品入口麻豆高清| 久久精品—区二区三区舞蹈| 国产精品久久久久影院日本| 成人黄色午夜影院| 成人不卡视频| 精品在线你懂的| 日韩不卡在线| 欧美三级电影在线| 激情五月婷婷网| 97人人澡人人爽91综合色| 成人在线免费电影网站| 久久久91精品国产一区二区三区| 菠萝蜜网站在线观看| 欧美亚洲专区| 日韩欧美不卡| 在线观看日本www| 欧美在线1区| 国产精品27p| 一本色道88久久加勒比精品| 蜜臀久久99精品久久久无需会员| 国产成人免费av| 精品丝袜在线| 欧美孕妇孕交黑巨大网站| 骚虎视频欧美| 亚洲色图19p| 久久久国产精华液999999| 中文字幕av一区二区三区谷原希美| 中文字幕精品av| 欧美日韩国产精品成人| 麻豆传媒在线视频| 嫩草影院在线观看网站成人| 亚州av电影免费在线观看| 久久久精品国产网站| 欧美性色19p| 日韩网站在线播放| 久久久久亚洲av片无码| 欧美日韩一区二区三区四区五区六区| 美乳少妇欧美精品| 色妞在线综合亚洲欧美| 亚洲AV无码一区二区三区性| 欧美少妇在线观看| 久久精品黄色| 日韩欧美在线一区| 91精品一区二区三区综合| 精品国产一区二区三区2021| 无码人妻一区二区三区在线视频| 欧美激情国产日韩精品一区18| 国产精品久久久久久久久免费高清| 一本一本久久a久久精品综合妖精| av在线加勒比| 这里只有精品在线观看视频| 路边理发店露脸熟妇泻火| 国产原创在线视频| www天堂网| 欧美日韩免费看| 成人亚洲免费| 欧美视频日韩| 88av在线| 特黄视频免费看| 成人激情综合| 99久久婷婷国产综合精品电影√| 精品综合久久| 日韩精品一区二区三区中文精品| 懂色av中文一区二区三区天美| 欧美精品色婷婷五月综合| 亚洲激情社区| 亚洲sss综合天堂久久| www亚洲一区| 窝窝九色成人影院| av成人在线观看| 日本一区高清在线视频| 一本色道婷婷久久欧美| 日本精品免费一区二区三区| 精品国产乱码久久久久久1区二区| 男人用嘴添女人下身免费视频| 国产黄色一级网站| 日本中文字幕片| 狠狠色噜噜狠狠色综合久| 九色自拍视频| 最近2018年中文字幕在线| 色偷偷偷综合中文字幕;dd| 国产精品妹子av| 91午夜视频| 久久99热精品| 亚洲综合图片一区| 久久视频这里只有精品| 亚洲精品456在线播放狼人| 一级淫片免费看| 国内精品久久久久久影院老狼| 午夜精品久久久久久久96蜜桃| 国产成人天天5g影院| 鲁片一区二区三区| 免费人成年激情视频在线观看| 亚洲午夜精品久久久久久人妖| 97久久中文字幕| 久久高清精品| 精品综合久久久久久8888| 国产综合18久久久久久| av中文字幕在线不卡| 精品人伦一区二区三区| 亚洲精品成a人| av在线免费在线观看| 青青青青久久精品国产一百度| 国产成人精品a视频一区| 91免费的视频在线播放| 最新精品国偷自产在线| 九九免费视频| 国产亚洲免费的视频看| 色哟哟一区二区三区| 69国产精品视频免费观看| 亚洲视频久久| 中文字幕中文字幕中文字幕亚洲无线| 91官网在线免费观看| 婷婷综合国产| 黄色成人精品网站|