亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? logsplitter.cpp

?? 日志解析
?? CPP
字號:
/***************************************************************************	revision             : $Id: logsplitter.cpp,v 1.2 2005/10/05 14:21:15 wiz Exp $    copyright            : (C) 2005 by Simone Tellini    email                : tellini@users.sourceforge.net ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include "main.h"#include "logsplitter.h"#include "exceptions.h"#include <algorithm>#include <cctype>#include <sys/poll.h>#include <fcntl.h>#include <pwd.h>#include <grp.h>//---------------------------------------------------------------------------LogSplitter::LogSplitter( int argc, const char *argv[] ){	if( argc < 2 )		throw EWrongArgs();			CfgName    = argv[ 1 ];	Running    = true;	BufUsed    = 0;	DefaultLog = NULL;	Overflowed = false;		time( &LastCheck );	Cfg.Load( CfgName );	SetCredentials();	InitLogFiles();	LoadState();}//---------------------------------------------------------------------------LogSplitter::~LogSplitter(){	delete DefaultLog;		for( int i = 0; i < Logs.size(); i++ )		delete Logs[ i ];}//---------------------------------------------------------------------------void LogSplitter::SetCredentials( void ){	string str = Cfg.GetString( "General", "Group", "" );		if( !str.empty() ) {		struct group *grp = getgrnam( str.c_str() );				if( grp )			setgid( grp->gr_gid );	}		str = Cfg.GetString( "General", "User", "" );	if( !str.empty() ) {        struct passwd  *pwd = getpwnam( str.c_str() );        if( pwd )            setuid( pwd->pw_uid );	}}//---------------------------------------------------------------------------void LogSplitter::InitLogFiles( void ){	const vector<string>&	sections = Cfg.GetSections();	string					defLog = Cfg.GetString( "DefaultLog", "Path", "" );		for( int i = 0; i < sections.size(); i++ ) {		string				sec = sections[ i ];		string::size_type	pos = sec.find( ' ' );			if( pos != string::npos ) {			string word = sec.substr( 0, pos );					transform( word.begin(), word.end(), word.begin(), static_cast<int(*)(int)>( tolower )); 						if( word == "host" ) {				LogFile	*log = new LogFile( sec.substr( pos + 1 ));								log->SetFileName( Cfg.GetString( sec, "Path" ));				log->SetPeriod( Cfg.GetString( sec, "Period", "1 days" ));				log->SetPostRotate( Cfg.GetString( sec, "PostRotate" ));				Logs.push_back( log );				LogsHash[ log->GetHostLowerCase() ] = log;			}		}		}		if( !defLog.empty() ) {		DefaultLog = new LogFile( "" );				DefaultLog->SetFileName( Cfg.GetString( "DefaultLog", "Path" ));		DefaultLog->SetPeriod( Cfg.GetString( "DefaultLog", "Period", "1 days" ));		DefaultLog->SetPostRotate( Cfg.GetString( "DefaultLog", "PostRotate" ));	}}//---------------------------------------------------------------------------void LogSplitter::LoadState( void ){	string		file = Cfg.GetString( "General", "StateFile", "/var/run/logsplitter/state.ini" );	Settings	state;		state.Load( file );	for( int i = 0; i < Logs.size(); i++ ) {		LogFile	*log = Logs[ i ];			log->SetLastRotateTime( state.GetInt( log->GetHost(), "LastRotateTime", log->GetLastRotateTime() ));	}	if( DefaultLog )		DefaultLog->SetLastRotateTime( state.GetInt( "DefaultLog", "LastRotateTime", DefaultLog->GetLastRotateTime() ));}//---------------------------------------------------------------------------void LogSplitter::SaveState( void ){	ofstream	fh( Cfg.GetString( "General", "StateFile", "/var/run/logsplitter/state.ini" ).c_str(), ios::trunc );	for( int i = 0; i < Logs.size(); i++ ) {		LogFile	*log = Logs[ i ];		fh << "[" << log->GetHost() << "]" << endl;		fh << "LastRotateTime = " << log->GetLastRotateTime() << endl;	}	if( DefaultLog ) {		fh << "[DefaultLog]" << endl;		fh << "LastRotateTime = " << DefaultLog->GetLastRotateTime() << endl;	}			fh.flush();}//---------------------------------------------------------------------------void LogSplitter::Run( void ){	try {		struct pollfd	pfd = { STDIN_FILENO, POLLIN | POLLHUP, 0 };			umask( 027 );		fcntl( STDIN_FILENO, F_SETFL, fcntl( STDIN_FILENO, F_GETFL, 0 ) | O_NONBLOCK );			while( Running ) {			poll( &pfd, 1, 1000 );						if( pfd.revents & ( POLLIN | POLLHUP ))				ReadData();						CheckRotations();						pfd.revents = 0;		}	}	catch( const EEOF &e ) {	}	catch(...) {		fprintf( stderr, "Unhandled exception caught" );	}		SaveState();}//---------------------------------------------------------------------------void LogSplitter::ReadData( void ){	int avail = sizeof( Buffer ) - BufUsed, len;		// should never happen, but if it does, swallow the first part of the line	if( avail < 1 ) {			avail      = sizeof( Buffer );		BufUsed    = 0;		Overflowed = true;	}		len = read( STDIN_FILENO, &Buffer[ BufUsed ], avail );		if(( len == 0 ) || (( len < 0 ) && ( errno != EAGAIN )))		throw EEOF();			BufUsed += len;		CheckLine();}//---------------------------------------------------------------------------void LogSplitter::CheckLine( void ){	bool gotLine;		do {		gotLine = false;			for( int i = 0; i < BufUsed; i++ )			if( Buffer[ i ] == '\n' ) {								Buffer[ i ] = '\0';								if(( i > 0 ) && ( Buffer[ i - 1 ] == '\r' ))					Buffer[ i - 1 ] = '\0';								LogLine( string( Buffer ));							BufUsed -= i + 1;					if( BufUsed )					memcpy( Buffer, &Buffer[ i + 1 ], BufUsed );							i          = BufUsed;				Overflowed = false;				gotLine    = true;			}	} while( gotLine );}//---------------------------------------------------------------------------void LogSplitter::LogLine( string line ){	string::size_type	pos = line.find( ' ' );	LogFile				*log = DefaultLog;	if( !Overflowed && ( pos != string::npos )) {		string 					vhost = line.substr( 0, pos );		logHash::const_iterator	l;		transform( vhost.begin(), vhost.end(), vhost.begin(), static_cast<int(*)(int)>( tolower ));		l = LogsHash.find( vhost );		if( l != LogsHash.end() ) {			log = l->second;			line.erase( 0, pos + 1 );		}	}	if( log )		log->Write( line );}//---------------------------------------------------------------------------void LogSplitter::CheckRotations( void ){	time_t	now;		time( &now );	if( LastCheck != now ) {		for( int i = 0; i < Logs.size(); i++ )			Logs[ i ]->CheckRotation( now );		if( DefaultLog )			DefaultLog->CheckRotation( now );		LastCheck = now;	}}//---------------------------------------------------------------------------

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美三级三级三级| 色哟哟国产精品免费观看| 国产精品女上位| 欧美精品色一区二区三区| 成人永久免费视频| 日本视频一区二区| 一区二区成人在线| 欧美国产一区二区| 日韩精品一区二区三区视频播放| 91麻豆国产福利在线观看| 国产福利一区二区三区视频| 香蕉久久一区二区不卡无毒影院| 欧美—级在线免费片| 精品日本一线二线三线不卡| 欧美久久一二区| 色哟哟国产精品| 成人动漫av在线| 国产一区二区三区| 免费高清视频精品| 午夜亚洲国产au精品一区二区| 亚洲人成7777| 国产精品美女久久久久高潮 | 制服丝袜成人动漫| 91麻豆福利精品推荐| 粉嫩av亚洲一区二区图片| 美女一区二区视频| 日本视频免费一区| 日韩avvvv在线播放| 亚洲图片欧美综合| 一区二区三区精品视频在线| 亚洲丝袜制服诱惑| √…a在线天堂一区| 中文文精品字幕一区二区| 欧美精品一区二区久久婷婷| 日韩免费在线观看| 日韩欧美在线一区二区三区| 欧美一区二区三区四区久久| 欧美另类变人与禽xxxxx| 欧美三区免费完整视频在线观看| 日本高清成人免费播放| 色婷婷亚洲综合| 欧美亚洲一区二区在线观看| 日韩精品一区二区在线| 欧美一级搡bbbb搡bbbb| 日韩欧美你懂的| 欧美精品一区二区精品网| 久久久久九九视频| 国产精品无遮挡| 亚洲欧洲日韩女同| 日韩理论片中文av| 有码一区二区三区| 午夜欧美在线一二页| 奇米影视7777精品一区二区| 狠狠色狠狠色综合| 不卡一区二区在线| 91九色最新地址| 8v天堂国产在线一区二区| 日韩一级二级三级精品视频| 欧美一级欧美一级在线播放| 久久免费视频一区| 中文字幕一区二区5566日韩| 亚洲自拍偷拍麻豆| 免费成人深夜小野草| 国产激情一区二区三区四区 | 555www色欧美视频| 日韩一区二区三区免费看 | 亚洲综合一区在线| 免费一级欧美片在线观看| 精品一区二区三区免费播放| 国产91清纯白嫩初高中在线观看| a级精品国产片在线观看| 欧美在线不卡视频| 欧美tk—视频vk| 综合分类小说区另类春色亚洲小说欧美| 亚洲三级在线免费观看| 婷婷久久综合九色综合伊人色| 久久99久久99小草精品免视看| 丁香一区二区三区| 3atv在线一区二区三区| 国产日韩在线不卡| 亚洲成av人在线观看| 国产另类ts人妖一区二区| 色综合一个色综合| 欧美一区在线视频| 亚洲欧洲精品天堂一级| 日韩精品亚洲一区| 成人国产一区二区三区精品| 欧美男男青年gay1069videost| 久久久久久久国产精品影院| 亚洲一区二区三区美女| 激情综合色综合久久| 日本精品一区二区三区四区的功能| 欧美一二三区在线| 亚洲摸摸操操av| 国产中文字幕精品| 欧美日韩午夜在线| 国产精品系列在线| 久久国产剧场电影| 欧美性生活影院| 中文字幕欧美日韩一区| 污片在线观看一区二区| 99国产一区二区三精品乱码| 日韩精品专区在线影院观看| 一区二区三区日本| 国产成人99久久亚洲综合精品| 欧美久久久一区| 亚洲免费电影在线| 成人精品高清在线| 日韩欧美中文字幕公布| 亚洲国产成人tv| 色先锋aa成人| 中文字幕的久久| 韩国女主播一区| 欧美一区二区黄| 午夜欧美电影在线观看| aaa国产一区| 久久精品夜色噜噜亚洲a∨| 日本亚洲免费观看| 在线电影欧美成精品| 一区二区三区在线观看国产| 成人av电影在线观看| 亚洲国产精品久久人人爱| a级高清视频欧美日韩| 久久久精品国产99久久精品芒果| 蜜臀91精品一区二区三区| 欧美日韩高清影院| 一区二区三区加勒比av| 91麻豆福利精品推荐| 亚洲日本电影在线| 色综合一个色综合亚洲| 亚洲欧洲精品一区二区精品久久久| 成人蜜臀av电影| 国产精品乱码久久久久久| 国产成人av电影在线| 中日韩免费视频中文字幕| 丁香婷婷深情五月亚洲| 日本一区二区视频在线| 国产69精品久久久久777| 国产欧美一区二区在线| 国产成人av电影在线播放| 国产精品素人一区二区| 成人av午夜电影| 一区二区三区日韩欧美精品| 欧美三区在线观看| 日韩精品一级中文字幕精品视频免费观看 | 99re热这里只有精品视频| 国产精品传媒入口麻豆| 99re6这里只有精品视频在线观看| 国产精品美女久久久久久久| av在线播放一区二区三区| 亚洲精品日产精品乱码不卡| 一本色道a无线码一区v| 亚洲激情图片小说视频| 精品污污网站免费看| 日本亚洲最大的色成网站www| 欧美一级一级性生活免费录像| 久久国产福利国产秒拍| 久久影院视频免费| 国产成人综合在线播放| 亚洲欧美日韩国产成人精品影院 | 色综合久久天天| 婷婷综合另类小说色区| 日韩三级视频中文字幕| 国产精品一区二区三区网站| 中文字幕亚洲视频| 欧美精品 国产精品| 激情伊人五月天久久综合| 26uuu国产一区二区三区| 成人黄色免费短视频| 亚洲一区二区三区四区五区中文 | 亚洲精品免费视频| 7777精品伊人久久久大香线蕉经典版下载| 久久精品国内一区二区三区| 国产欧美一区二区三区在线看蜜臀| 91蝌蚪porny九色| 秋霞av亚洲一区二区三| 日本一区二区成人在线| 欧美体内she精高潮| 韩国理伦片一区二区三区在线播放| 国产精品二三区| 日韩女优毛片在线| 97se亚洲国产综合自在线观| 日本不卡的三区四区五区| 国产精品乱人伦中文| 欧美日韩中文国产| 成人不卡免费av| 男女性色大片免费观看一区二区 | 91香蕉视频黄| 开心九九激情九九欧美日韩精美视频电影 | 色婷婷狠狠综合| 韩国精品久久久| 亚洲高清久久久| 中文字幕精品在线不卡| 欧美一区二区三区公司| av激情综合网| 国产自产2019最新不卡| 视频在线观看一区| 亚洲激情自拍视频| 亚洲国产高清在线观看视频| 欧美一卡二卡三卡|