tansen_homework
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
//#include <iostream>
//#include "fun.h"
//using namespace std;
#define DEBUG_LOG /*this macro to control the debug print*/
#ifdef DEBUG_LOG
#define LOG_ERROR(args...) do { printf("[TS][ERR]@%u:",__LINE__); printf(args); } while (0);
#define LOG_PRINT(args...) do { printf("[TS][LOG]"); printf(args); } while (0);
#else
#define LOG_ERROR(args...) do { printf("[TS][ERR]@%u:",__LINE__); printf(args); } while (0);
#define LOG_PRINT(args...)
#endif
static char *file_path = "log.txt";
#define MAX_LINE_CONTENT 512 /*assume the max line content.*/
static int LineContentParse(char * pInputString)
{
return 0;
}
static int InvokeType(char * pInputString)
{
#if 0
char* cre="create";
char* upd="update";
char* del="delete";
char* ins="insert";
if ( strncmp(pInputString,cre,strlen(cre))== 0 )
{
}
if ( strncmp(pInputString,upd,strlen(upd))== 0 )
{
}
#endif
return 0;
}
int main(int iArgc, char * apcArgv [])
{
FILE *fp=NULL;
FILE *fp_reserved=NULL;
char *pBuffer=NULL;
char *pBuffer_reserved=NULL;/*if you use stesep , use this point to free the memory!!!!!*/
char* end_mark1="/*!*/;";
char* end_mark2="'/*!*/;";
/*check the file was exist or not.*/
if ( access(file_path,0) )
{
LOG_ERROR(" FILE DOESN'T EXISIT!\n");
exit(-1);
}
/*open and check */
fp = fopen(file_path, "r");
if( NULL == fp)
{
LOG_ERROR(" open file:%s failed\n",file_path);
exit(-1);
}
fcntl(fileno(fp), F_SETFD, FD_CLOEXEC);
fp_reserved = fp;/*maybe you need it.*/
/*remind: donot allocate memory from stack , please allocate memory from heap, that is for programer.*/
pBuffer = (char *)malloc(sizeof(char)*MAX_LINE_CONTENT);
if(!pBuffer)
{
LOG_ERROR(" memory allocate faied\n");
goto error_one;
}
/*remind: clear the buffer once you allocate from the heap*/
memset(pBuffer,0,MAX_LINE_CONTENT);
while( (fgets (pBuffer, MAX_LINE_CONTENT, fp))!= NULL )/*every time , fp will move to another line*/
{
pBuffer_reserved = pBuffer;
/*suggest api of string operation:strstr/strsep*/
/*step1: check the line valid or not, if the line is empty ?*/
/*step2: check the mark*/
if(strstr(pBuffer, end_mark1)!=NULL || strstr(pBuffer, end_mark2)!=NULL )
{
//LOG_PRINT(" +++++FIT\n");
/*step3: strsep the string, and check more.*/
/*give you a example: http://baike.baidu.com/view/2466295.htm*/
printf("\n\n");
LOG_PRINT(" buffer-before: %s\n",pBuffer);
//!!!!!strsep will change the point of pBuffer.
LOG_PRINT(" buffer-after: %s\n",strsep(&pBuffer_reserved,end_mark1));
#if 0
if( Index_KMP (fp_reserved, key, fp))
{
/*do your operation here.*/
InvokeType();
}
#endif
}
/*clear the data since it will be used for next line.*/
memset(pBuffer,0,MAX_LINE_CONTENT);
}
/*actually, you can use sleep to debug your code , that is a usefull way.*/
//sleep(2);
error_two:
free(pBuffer);
pBuffer_reserved=NULL;/*donot forget to set the point to NULL.*/
pBuffer=NULL;
error_one:
fclose(fp);
fp = NULL;
return 0;
}
LOG:
[xichen@SSDEV002 file_tansen]$ gcc mysql_log_analysis.c [xichen@SSDEV002 file_tansen]$ ./a.out [TS][LOG] buffer-before: DELIMITER /*!*/; [TS][LOG] buffer-after: DELIMITER [TS][LOG] buffer-before: ROLLBACK/*!*/; [TS][LOG] buffer-after: ROLLBACK [TS][LOG] buffer-before: '/*!*/; [TS][LOG] buffer-after: ' [TS][LOG] buffer-before: use `tansen`/*!*/; [TS][LOG] buffer-after: use `tansen` [TS][LOG] buffer-before: SET TIMESTAMP=1383996813/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1383996813 [TS][LOG] buffer-before: SET @@session.pseudo_thread_id=36/*!*/; [TS][LOG] buffer-after: SET @@session.pseudo_thread_id=36 [TS][LOG] buffer-before: SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; [TS][LOG] buffer-after: SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1 [TS][LOG] buffer-before: SET @@session.sql_mode=0/*!*/; [TS][LOG] buffer-after: SET @@session.sql_mode=0 [TS][LOG] buffer-before: SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; [TS][LOG] buffer-after: SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1 [TS][LOG] buffer-before: /*!\C gbk *//*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8/*!*/; [TS][LOG] buffer-after: SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8 [TS][LOG] buffer-before: SET @@session.lc_time_names=0/*!*/; [TS][LOG] buffer-after: SET @@session.lc_time_names=0 [TS][LOG] buffer-before: SET @@session.collation_database=DEFAULT/*!*/; [TS][LOG] buffer-after: SET @@session.collation_database=DEFAULT [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: use `mysql`/*!*/; [TS][LOG] buffer-after: use `mysql` [TS][LOG] buffer-before: SET TIMESTAMP=1383997879/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1383997879 [TS][LOG] buffer-before: /*!\C utf8 *//*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/; [TS][LOG] buffer-after: SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1383997891/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1383997891 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: DELIMITER /*!*/; [TS][LOG] buffer-after: DELIMITER [TS][LOG] buffer-before: ROLLBACK/*!*/; [TS][LOG] buffer-after: ROLLBACK [TS][LOG] buffer-before: '/*!*/; [TS][LOG] buffer-after: ' [TS][LOG] buffer-before: DELIMITER /*!*/; [TS][LOG] buffer-after: DELIMITER [TS][LOG] buffer-before: '/*!*/; [TS][LOG] buffer-after: ' [TS][LOG] buffer-before: SET TIMESTAMP=1384356654/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356654 [TS][LOG] buffer-before: SET @@session.pseudo_thread_id=36/*!*/; [TS][LOG] buffer-after: SET @@session.pseudo_thread_id=36 [TS][LOG] buffer-before: SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/; [TS][LOG] buffer-after: SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1 [TS][LOG] buffer-before: SET @@session.sql_mode=0/*!*/; [TS][LOG] buffer-after: SET @@session.sql_mode=0 [TS][LOG] buffer-before: SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/; [TS][LOG] buffer-after: SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1 [TS][LOG] buffer-before: /*!\C gbk *//*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8/*!*/; [TS][LOG] buffer-after: SET @@session.character_set_client=28,@@session.collation_connection=28,@@session.collation_server=8 [TS][LOG] buffer-before: SET @@session.lc_time_names=0/*!*/; [TS][LOG] buffer-after: SET @@session.lc_time_names=0 [TS][LOG] buffer-before: SET @@session.collation_database=DEFAULT/*!*/; [TS][LOG] buffer-after: SET @@session.collation_database=DEFAULT [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: use `tansen`/*!*/; [TS][LOG] buffer-after: use `tansen` [TS][LOG] buffer-before: SET TIMESTAMP=1384356654/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356654 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356672/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356672 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356672/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356672 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356701/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356701 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356701/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356701 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356719/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356719 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356719/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356719 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356758/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356758 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356758/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356758 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356861/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356861 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356861/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356861 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [TS][LOG] buffer-before: SET TIMESTAMP=1384356923/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356923 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: SET TIMESTAMP=1384356923/*!*/; [TS][LOG] buffer-after: SET TIMESTAMP=1384356923 [TS][LOG] buffer-before: /*!*/; [TS][LOG] buffer-after: [TS][LOG] buffer-before: COMMIT/*!*/; [TS][LOG] buffer-after: COMMIT [xichen@SSDEV002 file_tansen]$
浙公网安备 33010602011771号