zoukankan      html  css  js  c++  java
  • Linux上传主机开销

    上传主机信息

    编写服务端、客户端程序。要求客户端程序上传其主机 CPU、内存、硬盘空 间开销,服务端程序接收到数据后以合理形式在屏幕上显示。

    思路

    ​ 调用系统的 (shell) 命令,然后再解析结果。就是正则表达式和一些基本操作。求出结果后整理格式上传即可。服务器随便搞一个能接字符串输出字符串就行。服务器的 (tcp) 内容是抄的,就不放了。主要看下怎么获取信息即可。

    代码部分

    $ client.c $

    /* File Name: client.c */  
      
    #include<stdio.h>  
    #include<stdlib.h>  
    #include<string.h>  
    #include<errno.h>  
    #include<sys/types.h>  
    #include<sys/socket.h>  
    #include<netinet/in.h>  
    #include<arpa/inet.h> 
    #define MAXLINE 4096  
      
    char str[256];
    void getdisk(long long int* diskall,long long int* diskused){
    	FILE* fp;
    	fp=popen(" df / | tail -1 ","r");
    	fscanf(fp,"%s",str);
    	fscanf(fp,"%lld%lld",diskall,diskused);
    	pclose(fp);
    }
    void getmem(long long int* memall,long long int* memused){
    	*memall=0,*memused=0;
    	FILE* fp;
    	fp=popen("top -n 1 | grep Mem | awk -F: '{print $2}'","r");
    	fscanf(fp,"%s",str);
    	fscanf(fp,"%lld",memall);
    	fscanf(fp,"%s",str);
    	fscanf(fp,"%lld",memused);
    	pclose(fp);
    }
    void getcpu(double *percent){
    	*percent=0;
    	FILE* fp;
    	fp=popen("top -n 1 | grep Cpu | awk -F, '{print $4}'","r");
    	fscanf(fp,"%s",str);
    	fscanf(fp,"%lf",percent);
    	pclose(fp);
    }
    
    long long int memall,memused,diskall,diskused;
    double cpurate;
    void get(){
    	double cpupercent;
    	getdisk(&diskall,&diskused);
    	getmem(&memall,&memused);
    	getcpu(&cpurate);
    }
    int main(int argc, char** argv)  
    {  
        int    sockfd, n,rec_len;  
        char    recvline[4096], sendline[4096];  
        char    buf[MAXLINE];  
        struct sockaddr_in    servaddr;  
      
      
        if( argc != 2){  
        printf("usage: ./client <ipaddress>
    ");  
        exit(0);  
        }  
      
        sockfd = socket(AF_INET, SOCK_STREAM, 0)  ;
      
      
        memset(&servaddr, 0, sizeof(servaddr));  
        servaddr.sin_family = AF_INET;  
        servaddr.sin_port = htons(8000);  
        inet_pton(AF_INET, argv[1], &servaddr.sin_addr) ;  
      
        connect(sockfd, (struct sockaddr*)&servaddr, sizeof(servaddr)) ; 
      	get();
        printf("send msg to server: 
    ");  
    	sprintf(sendline,"
    Disk:all:%lldKiB	free:%lldKiB
    Mem:all:%lldKiB	free:%lldKiB
    cpu:emptyrate:%.2lf%%
    ",diskall,diskused,memall,memused,cpurate);
        send(sockfd, sendline, strlen(sendline),0);
    	rec_len = recv(sockfd, buf, MAXLINE,0);
        buf[rec_len]  = '';  
        printf("Received : %s ",buf);  
        exit(0);  
    }  
    
    

  • 相关阅读:
    存储过程
    pl/sql锁
    事务处理
    记录类型(学习笔记)
    ExecutorException: A query was run and no Result Maps were found for the Mapped Statement ''. It's likely that neither a Result Type nor a Result Map was specified.
    element中的el-form踩的坑
    关于location.href家族的区别和用法
    ajax的路径跳转
    使用thymeleaf模板引擎时的路径问题
    关于mybatis的传多个参数的问题
  • 原文地址:https://www.cnblogs.com/greenpepper/p/14153371.html
Copyright © 2011-2022 走看看