⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 adm_mon.c

📁 UNIX/LINUX平台下面SMS网管原代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	}	pclose( pfp) ;	return( 0) ;}int ViewApp(){	char *title=" 服务进程信息 " ;	char *p ;	int  flag=0, i, j ;	void viewapp_action( int ) ;	if ( find_bms_cfg() != SUCCESS ) {		MessageBX( "find_bms_cfg error!") ;		return 0;	}	find_apserver_cfg() ;	clear_pid() ;	for ( i = 0; i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0; i++ ) {		p = strrchr( ApSrv[ i].pathname, '/') ;		p ++ ;		if ( SearchPid( p, pid[ i]) <= 0 && ApSrv[ i].start_mode == RESIDENT ) {			continue ;		}		flag ++ ;	}	if ( flag == 0 ) {		MessageBX( "服务进程没有启动!") ;		return 0;	}	tmpWin = CreateWindow(4, 7, 18, 60, REGULAR_BOARD, title, NULL);	mvwprintw( tmpWin->win, 1, 2, "Svr_T Svr_N Run_Mode M_Concur C_Concur  Program") ;	wrefresh( tmpWin->win) ;	displayappinfo( tmpWin->win) ;	signal( SIGALRM, viewapp_action) ;	alarm( 1) ;	while (getchar() != 27) ;	signal( SIGALRM, SIG_IGN) ;	alarm( 0) ;	DeleteWindow(tmpWin);	return 0;}void viewapp_action( int sign){	void viewapp_action() ;	displayappinfo( tmpWin->win) ;	signal( SIGALRM, viewapp_action) ;	alarm( 2) ;	return ;}int displayappinfo(WINDOW *pwin){	char *p, tmp[ 20] ;	char cmd[ 80] ;	int  procnum=0 ;	int  i, j, k ;	i = 0 ;	do {		memset( tmp, '\0', sizeof( tmp)) ;		if ( ApSrv[ i].start_mode == RESIDENT )			strcpy( tmp, "Resident") ;		else if ( ApSrv[ i].start_mode = TRIGGER )			strcpy( tmp, "Trigger") ;		else strcpy( tmp, "Other") ;		p = strrchr( ApSrv[ i].pathname, '/') ;		p ++ ;		procnum = SearchCmdLine( p) ;		if ( procnum <= 0 ) procnum = 0 ;		memset( cmd, '\0', sizeof( cmd)) ;		/*strcpy( cmd, strstr( CmdLine[ 0], p)) ; */		strcpy( cmd, p) ;		k = i / 16 ;		mvwprintw( pwin, 2 + (i-k*16), 2, " %-4d  %-3d  %-8s   %-2d       %-2d     %s", 			ApSrv[ i].apg_id, ApSrv[ i].act_rec.num, tmp, 			ApSrv[ i].start_num, procnum, cmd) ;		if ( i%16 == 0 ) mvwprintw( pwin, 17, 26, "第 [%2d] 页", k+1) ;		if ( (i+1)%16 == 0 ) {			ZWareaclear( pwin, 2, 2, 16, 58) ;		}		wrefresh( pwin) ;		i ++ ;	} while ( i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0 ) ;	return( SUCCESS) ;}int ViewShm(){	char *title= " 数据缓冲池信息 " ;	void viewshm_action( int ) ;	if ( SearchCmdLine( "poll.d") <= 0 ) {		MessageBX( "通讯进程没有启动!") ;		return 0;	}	if ( find_bms_cfg() != SUCCESS ) {		MessageBX( "find_bms_cfg error!") ;		return 0;	}	if (get_shm_id() == FAILURE || get_shm_p() == FAILURE ) {		MessageBX("严重警告: 用于建立缓冲池的共享内存有错误!") ;		return 0;	}	tmpWin = CreateWindow(3, 3, 20, 75, REGULAR_BOARD, title, NULL);	signal( SIGALRM, viewshm_action) ;	alarm( 1) ;	while (getchar() != 27) ;	signal( SIGALRM, SIG_IGN) ;	alarm( 0) ;	DeleteWindow(tmpWin);	return ;}void viewshm_action( int sign){	int i, r, c ;	int inuser ;	void viewshm_action() ;	inuser = 0 ;	for ( i = 0 ; i < Sl_Accept ; i ++ )		if ( *(shmp+i) == INUSER ) inuser ++ ;	mvwprintw( tmpWin->win, 1, 2, "交易请求数: %-3d", inuser) ;	mvwprintw( tmpWin->win, 1, 19, "最大缓冲池: %-3d", Sl_Accept) ;	mvwprintw( tmpWin->win, 1, 38, "共享内存大小: %ld", max_shm_size) ;	mvwprintw( tmpWin->win, 2, 2, "------------------------------------------") ;	mvwprintw( tmpWin->win, 2, 41, "---------------------------------") ;	wrefresh( tmpWin->win) ;		for ( i = 0 ; i < Sl_Accept ; i ++ ) {		r = i / 24 ;		if ( (i%24) == 0 ) c = 0 ;		else c = c + 3 ;		if ( *(shmp+i) == INUSER )			mvwprintw( tmpWin->win, r+3, c+2, "★") ; 		else mvwprintw( tmpWin->win, r+3, c+2, "☆") ; 	}	wrefresh( tmpWin->win) ;	signal( SIGALRM, viewshm_action) ;	alarm( 2) ;	return ;}int StartMon(){	tmpWin = CreateWindow(0, 0, 0, 0, NO_BOARD, NULL, NULL);		SystemOpen();	system("monitor") ;	SystemClose();	DispTitle() ;	DeleteWindow(tmpWin);	return 0;}int find_bms_cfg(){	char psf[ 80], key[ 80], tmp[ 80] ;		sprintf( psf, "%s/%s", getenv("HOME"), "etc/bms.cfg") ;	sprintf( key, "SL_PORT") ;	if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ;	Sl_Port = atoi( tmp) ; 	sprintf( key, "SL_ACCEPT") ;	if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ;	Sl_Accept= atoi( tmp) ; 	if ( Sl_Accept > MAXCONNECTNUM ) {		fprintf( stdout, "SLserver Accept Over MAX_CONNECT_NUM!\n") ;		return( FAILURE) ;	}	sprintf( key, "SL_KEY") ;	if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ;	Sl_Key= atoi( tmp) ; 	sprintf( key, "SysInterVal") ;	if ( GetProfileString( psf, key, tmp) != SUCCESS ) return( FAILURE) ;	MyINTERVAL= atoi( tmp) ; 	return( SUCCESS) ;}int clear_pid(){	int i, j ;	for ( i = 0; i < MAXSVRNUM; i++ )		for ( j = 0; j < MAXCONCURNUM; j++ ) pid[ i][ j] = 0 ;	return( SUCCESS) ;}int SearchPid( char *procname, long pid[]){	FILE *pfp ;	char *p, cmd[ 80] ;	char buf[ 256] ;	char str[ 10] ; 	int  i ;	p = strrchr( (char *)getenv("HOME"), '/') ;	p ++ ;	sprintf( cmd, "ps -f -u %s", p) ;	if ( (pfp=popen( cmd, "rb")) == NULL ) {		fprintf( stdout, "popen ps -f -u output failure!\n") ;		return( -1) ;	}	 	i = 0 ;		while ( !feof( pfp)) {		memset( buf, '\0', sizeof( buf)) ;		if ( fgets( buf, sizeof( buf), pfp) == NULL ) 			continue ;		if ( strstr( buf, procname) != NULL ) {			memset( str, '\0', sizeof( str)) ;			sscanf( buf, "%*s %s", str) ;			pid[ i] = atol( str) ;			i ++ ;		}	}	pclose( pfp) ;	if ( i == 0 ) return( -1) ;	return( i) ;	}int SearchCmdLine( char *procname){	FILE *pfp ;	char *p, *q, cmd[ 80] ;	char buf[ 256] ;	int  i ;	p = strrchr( (char *)getenv("HOME"), '/') ;	p ++ ;	sprintf( cmd, "ps -f -u %s", p) ;	if ( (pfp=popen( cmd, "rb")) == NULL ) {		fprintf( stdout, "popen ps -f -u output failure!\n") ;		return( -1) ;	}	 	i = 0 ;		while ( !feof( pfp)) {		memset( buf, '\0', sizeof( buf)) ;		if ( fgets( buf, sizeof( buf), pfp) == NULL ) 			continue ;		if ( strstr( buf, procname) != NULL ) {			memset( CmdLine[ i], '\0', sizeof( CmdLine[ i])) ;			p = &buf[ 0] ;			q = &CmdLine[ i][ 0] ;			while ( *p != '\0' && *p != '\n' && *p != '\t' ) {				*q = *p ;				p ++ ;				q ++ ;			}			i ++ ;		}	}	pclose( pfp) ;	if ( i == 0 ) return( -1) ;	return( i) ;	}int get_shm_id(){	int shmflg ;	shmflg = QPERM ;	max_shm_size = Sl_Accept * ( 1 + 8 + sizeof( SUN_BUF)) ;	if ( (shmid=shmget( Sl_Key, max_shm_size, shmflg)) == -1)		return( FAILURE) ;	return( SUCCESS) ;}int get_shm_p(){	shmp = (char *)0;	if ( (shmp=( char *)shmat(shmid, shmp, 0)) == (char *)-1 )		return( FAILURE) ;	return( SUCCESS) ;}int clr_shm(){	shmctl( shmid, IPC_RMID, 0) ;	return( SUCCESS) ;}int get_sem_id(){	int semflg ;	semflg = QPERM ;	if ( (semid=semget( Sl_Key, 1, semflg)) == -1) return( FAILURE) ;	return( SUCCESS) ;}int clr_sem(){	semctl(semid, 0, IPC_RMID, 0) ;	return( SUCCESS) ;}int get_tpnode(){	FILE *tpfp ;	char tpnode[ 80] ;	char buf[ 80] ;	sprintf( tpnode, "%s/%s", getenv("HOME"), TPNODE_FILE) ;	if ((tpfp=fopen( tpnode, "rb")) == NULL ) return( FAILURE) ;	NodeNum = 0 ;	while ( !feof( tpfp) ) {		memset( buf, '\0', sizeof( buf)) ;		if ( fgets( buf, 79, tpfp) == NULL ) break ; 			if ( buf[ 0] == '#' || buf[ 0] == '@' || buf[ 0] == '[' )			continue ;		memset( (char *)&TpNode[ NodeNum], '\0', sizeof( TpNode[ NodeNum])) ;		memset( tpnode, '\0', sizeof( tpnode)) ;		sscanf( buf, "%s %s", tpnode, TpNode[ NodeNum].node) ; 		get_net_b( tpnode, &TpNode[ NodeNum].address) ;		NodeNum ++ ;	}	fclose( tpfp) ;	return( SUCCESS) ;}/*----------------------------------------------------------*/#define MAXPROFILESTR 80#define MAXLENOFLINE  255int GetProfileString( char *psPfn, char *psKey, char *psRetStr){	FILE *fp ;	char psRet[ MAXPROFILESTR] ;	char psLine[ MAXLENOFLINE + 1] ;	int i, len ;	memset( psRet, '\0', sizeof( psRet)) ;	if ( (len=strlen(psKey)) <= 0 || len > MAXPROFILESTR -1 )		return( FAILURE) ;	if ( (fp=fopen( psPfn, "rb+")) == NULL) {		fprintf( stdout, "Cannot open file [%s]\n", psPfn) ;		return( FAILURE) ;	}	memset( psLine, '\0', sizeof( psLine)) ;	while ( fgets( psLine, MAXLENOFLINE, fp) != NULL) {		if ( psLine[ 0] == '[' ) continue ;		if ( StringCompare( psLine, psKey, len) == -1 )			continue ;		if ( psLine[ len] == '=') {			for (i = 0; i < MAXLENOFLINE-MAXPROFILESTR-1; i++){				if ( psLine[ i + len + 1] == 0 )					break ;				if ( psLine[ i + len + 1] == '\n' )					break ;				psRet[ i] = psLine[ len + i + 1] ; 			}			psRet[ i] = 0 ;			strcpy( psRetStr, psRet) ;			fclose( fp) ;			return( SUCCESS) ;		}	}	fclose( fp) ;	return( FAILURE) ;}int StringCompare( char *psFirst, char *psSecond, int iNum){	int i ;	for ( i = 0 ; i < iNum ; i++ ) {		if ( psFirst[ i] != psSecond[ i] )			return( -1) ;	}	return( 0) ;}int find_apserver_cfg(){	int i ;	for ( i = 0; i < MAXSVRNUM; i ++ ) {		memset( (char *)&ApSrv[ i], '\0', sizeof( ApSrv[ i])) ;		memset( (char *)&ApGrp[ i], '\0', sizeof( ApGrp[ i])) ;		memset( (char *)&ApSrvInfo[ i], '\0', sizeof( ApSrvInfo[ i])) ;	}	find_apserver_name() ;	for ( i = 0; i < MAXSVRNUM && ApSrv[ i].apsrv_id != 0; i++ ) {		ApSrvInfo[ i].apg_id = ApSrv[ i].apg_id ;		ApSrvInfo[ i].svr_num = 0 ;	}	return( SUCCESS) ;}int find_apserver_name(){	FILE *fp ;	char apserver_name[ 80] ;	char str[ 128] ;	char *p, *q ;	int  c, delimiter, flg=0 ;	sprintf( apserver_name, "%s/%s", getenv("HOME"), APSERVER_FILE) ;	if ( (fp=fopen( apserver_name, "rb")) == NULL ) return( FAILURE) ;	c = 0 ;	while ( !feof( fp) ) {		memset( str, '\0', sizeof( str)) ;		if ( fgets( str, 128, fp) == NULL ) continue ;		pub_trim( str) ;		if ( str[ 0] == '\n' || str[ 0] == '\r') continue ;		p = &str[ 0] ;		if ( *p == '#' ) continue ; 		if ( *p == '[' ) {			c ++ ;			delimiter = 0 ;			while ( *p != '\0' ) {				if ( *p == ']' ) break ;				if ( *p == DELIMITER ) delimiter ++ ;				p ++ ;			}			if ( *p == '\0' || delimiter != 3 ) continue ;			ApSrv[ c-1].apsrv_id = c ;			q = get_substr( str, 1) ;			strcpy( ApSrv[ c-1].pathname, q) ;			q = get_substr( str, 2) ;			if ( strcmp( "resident", q) == 0 )				ApSrv[ c-1].start_mode = RESIDENT ;			else if ( strcmp( "trigger", q) == 0 )				ApSrv[ c-1].start_mode = TRIGGER ;			else continue ;			q = get_substr( str, 3) ;			ApSrv[ c-1].start_num = atoi( q) ;			q = get_substr( str, 4) ;			if ( find_apgroup_name( q, &ApSrv[c-1], &ApGrp[c-1]) != SUCCESS )				ApSrv[ --c].apsrv_id = 0 ;			else if ( ApGrp[c-1].stat == 'n' )				ApSrv[ --c].apsrv_id = 0 ;		} else ApSrv[ c-1].act_rec.num ++ ;	}	fclose( fp) ;	return( SUCCESS) ;}int find_apgroup_name( char *apg_n, APSRV *Srv, APGRP *Grp){	FILE *fp ;	char apgroup_name[ 80] ;	char str[ 128], ts[ 80] ;	char *j, *k ;	int  delimiter, flg=0 ;	sprintf( apgroup_name, "%s/%s", getenv("HOME"), APGROUP_FILE) ;	if ( (fp=fopen( apgroup_name, "rb")) == NULL ) return( FAILURE) ;	sprintf( ts, "%s", apg_n) ;	while ( !feof( fp) ) {		memset( str, '\0', sizeof( str)) ;		if ( fgets( str, 128, fp) == NULL ) continue ;		pub_trim( str) ;		if ( str[ 0] == '\n' || str[ 0] == '\r') continue ;		j = &str[ 0] ;		if ( *j == '#' ) continue ; 		if ( *j == '[' ) {			delimiter = 0 ;			while ( *j != '\0' ) {				if ( *j == ']' ) break ;				if ( *j == DELIMITER ) delimiter ++ ;				j ++ ;			}			if ( *j == '\0' || delimiter != 4 ) {				fclose( fp) ;				return( FAILURE) ;			}			k = get_substr( str, 1) ;			if ( strcmp( ts, k) == 0 ) {				k = get_substr( str, 1) ;				strcpy( Grp->apgrp, k) ;				k = get_substr( str, 2) ;				Srv->apg_id = Grp->apg_id = atoi( k) ;				if ( Srv->apg_id == 0 ) {					fclose( fp) ;					return( FAILURE) ;				}				k = get_substr( str, 3) ;				strcpy( Grp->sl_pwd.pw_user, k) ;				k = get_substr( str, 4) ;				strcpy( Grp->sl_pwd.pw_grp, k) ;				k = get_substr( str, 5) ;				Grp->stat = k[ 0] ;				fclose( fp) ;				return( SUCCESS) ;			}		}	}	fclose( fp) ;	return( FAILURE) ;}char *get_substr( char *str, int posi){	char *p, *q ;	static char substr[ 128] ;	int i = 0, delimiter = 0 ;	if ( posi == 0 ) return( (char *)NULL) ;	memset( substr, '\0', sizeof( substr)) ;	p = &str[ 1] ;	while ( *p != '\0' ) {		if ( *p == DELIMITER ) delimiter ++ ;		if ( delimiter == posi || *p == ']' ) {			substr[ i] = 0 ;			return( substr) ;		}		if ( delimiter == posi - 1 && *p != DELIMITER) {			substr[ i] = *p ;			i ++ ;		}		p ++ ;	}	return( (char *)NULL) ;}void pub_trimtail( char *buffer ) ;char *pub_trimfront( char *buffer ) ;void pub_trim( char *buffer){	pub_trimtail( buffer) ;	sprintf( buffer, "%s", pub_trimfront( buffer)) ;	return ;}void pub_trimtail( char *buffer ){	int i, len ;	len = strlen( buffer) ;	for ( i = len - 1 ; i >= 0 ; i-- )	{		if ( buffer[ i] == ' ' )			buffer[ i] = '\0' ;		else			break ;	}	return ;}char *pub_trimfront( char *buffer ){	while ( *buffer != '\0' && *buffer == ' ' ) buffer ++ ;	return( buffer) ;}int get_addr( unsigned long net_b, char *c_addr){	union {		struct {			unsigned char b1 ;			unsigned char b2 ;			unsigned char b3 ;			unsigned char b4 ;		} bb ;		unsigned long ll ;	} ad ;	ad.ll = net_b ;	/*sprintf( c_addr, "%d.%d.%d.%d", ad.bb.b4, ad.bb.b3, ad.bb.b2, ad.bb.b1);*/	sprintf( c_addr, "%d.%d.%d.%d", ad.bb.b1, ad.bb.b2, ad.bb.b3, ad.bb.b4);	return( 0) ;}int get_net_b( char *c_addr, unsigned long *net_b){	union {		struct {			unsigned char b1 ;			unsigned char b2 ;			unsigned char b3 ;			unsigned char b4 ;		} bb ;		unsigned long ll ;	} ad ;	char *p, tmp[ 4] ;		p = strrchr( c_addr, '.') ;	*p = 0 ;	p ++ ;	ad.bb.b1 = atoi( p) ;	p = strrchr( c_addr, '.') ;	*p = 0 ;	p ++ ;	ad.bb.b2 = atoi( p) ;	p = strrchr( c_addr, '.') ;	*p = 0 ;	p ++ ;	ad.bb.b3 = atoi( p) ;	ad.bb.b4 = atoi( c_addr) ;	(*net_b) = ad.ll ;	return( 0) ;}int check_cli_addr( unsigned long net_b, char *node){	int i ;	for ( i = 0; i < NodeNum; i ++)		if ( net_b == TpNode[ i].address ) {			strcpy( node, TpNode[ i].node) ;			return( SUCCESS) ;		}	return( FAILURE) ;}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -