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

📄 myptop.cxx

📁 HPunix下资源监视程序,查看监视进程的CPU、内存的参数
💻 CXX
字号:
#include <sys/socket.h>#include <errno.h>#include <strings.h>#include <stdio.h>#include <stdlib.h>#include <netdb.h>#include <netinet/in.h>#include <arpa/inet.h>#include <unistd.h>#include <string.h>int ptop_tcp_open(char *host,char *service,int port);int ptop_write_message(int fd,char *ptr,int nbytes);int tel_read(int fd,char *ptr,int nbytes);int myreadn(int fd,char *ptr,int nbytes);void     ctrlchandler(int);int targetstatus_test(char *target_name);int ptop_write_message(int fd,char *ptr,int nbytes){	int nleft,nwritten;	nleft=nbytes;	while(nleft>0)	{		nwritten=write(fd,ptr,nleft);		if(nwritten<0) return(nwritten);		nleft-=nwritten;		ptr+=nwritten;	}	return(nbytes-nleft);}int ptop_tcp_open(char *host,char *service,int port){	int value=targetstatus_test(host);	if(value!=0)	{		printf("the target host %s is not available!\n",host);		return -1;	}	int fd;	unsigned long inaddr;	struct servent *sp;	struct hostent *hp;	struct sockaddr_in tcp_ser_addr;	struct servent tcp_serv_info;	struct hostent tcp_host_info;	bzero((char*)&tcp_ser_addr,sizeof(tcp_ser_addr));	tcp_ser_addr.sin_family=AF_INET;	tcp_ser_addr.sin_port=htons(port);/*caller's value*/	inaddr=inet_addr(host);	if(inaddr!=INADDR_NONE)	{		bcopy((char*)&inaddr,(char*)&tcp_ser_addr.sin_addr,sizeof(inaddr));		tcp_host_info.h_name=NULL;	}	else	{		hp=gethostbyname(host);		if(hp==NULL)		{			perror("tcp_open:host name error");			printf("host name is %s",host);			return(-1);		}	}	tcp_host_info=*hp;	//printf("(char*)hp->h_addr=%s \n",(char*)hp->h_addr);	bcopy((char*)hp->h_addr,(char*)&tcp_ser_addr.sin_addr,hp->h_length);	fd=socket(AF_INET,SOCK_STREAM,0);	if(fd<0)	{		perror("tcp_open:can't create a TCP socket");		return(-1);	}	//printf("connect before......fd=%d host=%s \n",fd,host);	if(connect(fd,(struct sockaddr*)&tcp_ser_addr,sizeof(tcp_ser_addr))<0)	{		perror("tcp_open: can't connet to server");		return(-1);	}	//printf("connect after......fd=%d host=%s \n",fd,host);	return(fd);}int tel_read(int fd,char *ptr,int nbytes){	int n;	again:	if((n=myreadn(fd,ptr,nbytes))<0)	{		if(errno==EINTR)		{		      errno=0;		      goto again;		 }		 return -1;	}	return n;}int myreadn(int fd,char *ptr,int nbytes){	int nleft,nread;nleft=nbytes;	while(nleft>0)	{		nread=recv(fd,ptr,nleft,0);		//printf("nread ===  %d fd=%d  \n",nread,fd);		if(nread<0)			return -1;		else if(nread==0)			break;		nleft-=nread;		ptr+=nread;	}	return(nbytes-nleft);}int srv_accept(int fd,struct sockaddr *cli_addr,int *clilen,char* descr){	int newfd,len;	again:	len=sizeof(*cli_addr);	clilen=&len;	newfd=accept(fd,(struct sockaddr*)cli_addr,clilen);	if(newfd<0)	{		if(errno==EINTR)		{			errno=0;			goto again;		}		//cout<<descr<<": accept error"<<endl;		printf("descr= %s  ,: accept error\n",descr);		return(-1);	}	return newfd;}int srv_init(char *service,int port,char* descr){        int fd,bufsize;        struct servent *sp;        struct sockaddr_in ser_addr;        struct servent serv_info;        struct hostent host_info;        bzero((char*)&ser_addr,sizeof(ser_addr));        ser_addr.sin_family=AF_INET;        ser_addr.sin_addr.s_addr=htonl(INADDR_ANY);	if(service!=NULL)  {               if((sp=getservbyname("sysmonitor","tcp"))==NULL)        {         			     //cout<<descr<<": I cannt't found service "<<service<<" in /etc/services file !!! "<<endl;							printf("descr= %s  ,:I cannt't found service =%s   in /etc/services file !!!\n",descr,service);              return -1;        }       				serv_info=*sp;        if(port>0)        	   ser_addr.sin_port=htons(port);        else                 ser_addr.sin_port=sp->s_port;        //printf("ser_addr.sin_port= %d \n",ser_addr.sin_port);  }       	else	{				if(port<=0)      	{                   //cout<<descr<<": must spesify ether service or port"<<endl;						printf("descr = %s  must spesify ether service or port \n",descr);            return -1;        }               ser_addr.sin_port=htons(port);	}	if((fd=socket(AF_INET,SOCK_STREAM,0))<0)  {       //cout<<descr<<": can't create a socket"<<endl;       printf("descr=%s : can't create a socket\n",descr);       close(fd);   	   return -1;  }	//printf("server --- fd = %d \n",fd);	bufsize=131072;  int secs = 300;  if(setsockopt(fd,SOL_SOCKET,SO_SNDBUF,&bufsize,sizeof(bufsize))<0)			printf("descr=%s : setsockopt err\n",descr);  if(setsockopt(fd,SOL_SOCKET,SO_RCVBUF,&bufsize,sizeof(bufsize))<0)			printf("descr=%s : setsockopt err1\n",descr);#ifndef __linux__        if(setsockopt(fd,SOL_SOCKET,SO_REUSEPORT,&bufsize,sizeof(bufsize))<0)#endif        if(setsockopt(fd,SOL_SOCKET,SO_REUSEADDR,&bufsize,sizeof(bufsize))<0) 	perror("Set Reuse error in rs_loop");	if(setsockopt(fd,SOL_SOCKET,SO_KEEPALIVE,&secs,sizeof(secs)) < 0)		printf("descr=%s : setsockopt err3\n",descr);  if(bind(fd,(struct sockaddr*)&ser_addr,sizeof(ser_addr))<0)  {			printf("descr=%s : bind err\n",descr);      if(errno==EADDRINUSE)         	printf("descr The specified address is already in use\n",descr);		  close(fd);		  return -1;	}	listen(fd,8);	return fd;}int	Select_socket_status( int socketfd ){	int 	sockfd;	fd_set  rset,wset;	struct timeval tval;	int	status;	sockfd=socketfd;	FD_ZERO(&rset);	FD_SET(sockfd,&rset);	wset = rset;	tval.tv_sec = 1;	tval.tv_usec = 0;	status=select(FD_SETSIZE,&rset,(fd_set *)0,(fd_set *)0,&tval);	//printf("------99999999999999status=%d\n",status);	if(status<0)	{		printf("------status=%d socketfd=%d \n",status,socketfd);		if(status ==-1)		{			return(-1);		}		else if(status ==-2)		{			close(socketfd);			return(-2);		}		else		{			printf("the status'value is %d    \n",status);			return(-3);		}	}	return(status);}int	Select_socket_status1( int socketfd , int flag){	int 	sockfd;	fd_set  rset,wset;	struct timeval tval;	int	status;	sockfd=socketfd;	FD_ZERO(&rset);	FD_SET(sockfd,&rset);	wset = rset;	tval.tv_sec = 1;	tval.tv_usec = 0;  	if(flag==0)//read polling  	{		status=select(FD_SETSIZE,&rset,(fd_set *)0,(fd_set *)0,&tval);		//printf("------99999999999999read status=%d\n",status);	}	else	{		status=select(FD_SETSIZE,(fd_set *)0,&rset,(fd_set *)0,&tval);		//printf("------99999999999999write status=%d\n",status);	}	if(status<0)	{		printf("------status=%d socketfd=%d \n",status,socketfd);		if(status ==-1)		{			return(-1);		}		else if(status ==-2)		{			close(socketfd);			return(-2);		}		else		{			printf("the status'value is %d    \n",status);			return(-3);		}	}	return(status);}int targetstatus_test(char *target_name){	int value=-1;	char    command[1][100];	bzero(command[0],100);	sprintf(command[0],"ping -I 1 %s 100 -n 2 -m 1",target_name);	value = system(command[0]);	return value;}

⌨️ 快捷键说明

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