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!
");
		exit(-1);
	}				

	/*open and check */
	fp  = fopen(file_path, "r"); 
	if( NULL == fp)
	{	
		LOG_ERROR("  open file:%s failed
",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
");
		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
");

			/*step3: strsep the string, and check more.*/

			/*give you a example:  http://baike.baidu.com/view/2466295.htm*/
			printf("

");
			LOG_PRINT(" buffer-before: %s
",pBuffer);

			//!!!!!strsep will change the point of  pBuffer.
			LOG_PRINT(" buffer-after: %s
",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]$
原文地址:https://www.cnblogs.com/chen-blog/p/3598232.html