📄 sysmonitor.cxx
字号:
#include <strings.h>#include <stdio.h>#include <signal.h>#include <string.h>#include <pthread.h>#include "sysmonitor.h"#include "myptop.h"#include <netdb.h>#include <stdlib.h>#include <unistd.h>#include <cc2000_pthread.h>#include <sys/types.h>#include <sys/socket.h>#include <arpa/inet.h>#include <sys/semaphore.h>int moni_interval;int nodenumber;extern struct NETMESSAGE *net_message_ptr;extern struct net_name *net_name_ptr;extern struct proc_name *proc_name_ptr;extern struct part_naem *part_name_ptr;extern struct PTHREADMESSAGE *pthread_message_ptr;extern struct netrecord *prev_net_ptr,*cur_net_ptr;extern struct NODEINFO *nodeinfo_ptr;int node_num=0;//NODEINFO nodeinfobuf[10];void send_message_toserver();void ctrlchandler(int);int sockfd=-1;sem_t *sem;extern struct pst_processor *psp,*psp_last;int main(int argc,char *argv[]){ pthread_t send_thread_id; pthread_t recv_thread_id; pthread_t check_status_id; char ipaddress[30],buff[512]; char descr[100]; int length=-1; struct sockaddr_in tcp_cli_addr; int channel_srv,count=0; signal(SIGINT,ctrlchandler); signal(SIGPIPE,SIG_IGN); if (argc==2) { int temp=atoi(argv[1]); if((temp>0)&&(temp<11)) { moni_interval=temp; } else { printf("moni_interval must be a integer between 0 and 11!\n"); exit(1); } } else { printf("Usage:%s moni_interval\n",argv[0]); printf("moni_interval is a integer between 0 and 11!\n"); exit(1); } bzero(hostname,HOSTLEN); gethostname(hostname,HOSTLEN); if(pthread_create(&send_thread_id,pthread_attr_default,(pthread_startroutine_t)send_message_toserver,(pthread_addr_t)0)<0) { perror("create send_message_toserver error"); exit(-1); } printf("send pthread create succeed!\n"); //create semaphore int flags,value=1; mode_t mode=0777; flags=O_RDWR|O_CREAT; sem=sem_open("/data/users/osa/bin/monitor_sem",flags,mode,value); if((!strcmp(hostname,"scd1"))||(!(strcmp(hostname,"scd2")))) { printf("start init DCEPM database ................\n"); dcepm_init(); strcpy(descr,"This is server"); sockfd=srv_init("sysmonitor",0,descr); if(sockfd < 0) { printf("this sockfd < 0 error !!!\n"); exit(0); } if(pthread_create(&check_status_id,pthread_attr_default,(pthread_startroutine_t)check_status,(pthread_addr_t)0)<0) { perror("create check_status() error"); exit(-1); } printf("check_status pthread create succeed!\n"); for(;;) { //channel_srv=accept(sockfd,(struct sockaddr *)&tcp_cli_addr,&length); channel_srv=srv_accept(sockfd,(struct sockaddr *)&tcp_cli_addr,&length,descr); //printf(" channel_srv == %d ---- \n",channel_srv); if(channel_srv<0) { printf("channel_srv < 0 error!!!!\n"); continue; } strcpy(ipaddress,inet_ntop(AF_INET,&tcp_cli_addr.sin_addr,buff,sizeof(buff))); printf("ipaddress = %s \n",ipaddress); if(pthread_create(&recv_thread_id,pthread_attr_default,(pthread_startroutine_t)recv_message_fromcli,(pthread_addr_t)channel_srv)<0) { perror("create recv_message_toserver error"); exit(-1); } printf("recv_thread_id create is :%d \n",recv_thread_id); } } else { while(1) { sleep(20); } } return(0);}void ctrlchandler(int){ int retcode=-1; retcode=dcepm_tb_close(); close(sockfd); shutdown(sockfd,2); sem_unlink("/data/users/osa/bin/monitor_sem"); free(psp); free(psp_last); free(pthread_message_ptr); free(proc_name_ptr); free(net_message_ptr); free(net_name_ptr); free(part_name_ptr); free(prev_net_ptr); free(cur_net_ptr); printf("\n GOODBYE\n"); exit(0);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -