c语言执行linux命令并通过结构体返回每行命令的输出

    #include <stdio.h>  
    #include <stdlib.h>  
    #include <unistd.h>   
    #define MAXBUFSIZE 1024
    
    typedef struct pro{
        char  pid[20];
        char user[20] ;
        char pr[20];
        char ni[20];
        char  virt[20];
        char res[20];
        char shr[20];
        char s[4];
        char pcpu[20];
        char pmem[20];
        char time[20];
        char command[100];
        } SVR_PRO;
        
    int getSvrInfo(SVR_PRO p[]);
    
    int main(){  
        SVR_PRO arr[30]={};
        int len = getSvrInfo(arr);

        int i = 0;
        for(;i<len-1;i++){
                printf("%s,%s\n",arr[i].pid,arr[i].user);
            }
        }
        
    int getSvrInfo(SVR_PRO p[]){
            FILE *f;
            char cmd[]="top -n 1";
            char buffer[MAXBUFSIZE];
            char null[20];
            FILE* pipe = popen(cmd, "r");    
            if (!pipe)  return -1;    
            int i=0,k=0;
            for(;fgets(buffer, sizeof(buffer), pipe)!=NULL;k++){
                    if(k<7) {continue;}
                    sscanf(buffer,"%s %s %s %s %s %s %s %s %s %s %s %s %s",null,p[i].pid,p[i].user,p[i].pr,p[i].ni,p[i].virt,p[i].res,p[i].shr,p[i].s,p[i].pcpu,p[i].pmem,p[i].time,p[i].command);
                    //printf("%d--------------------------%s,%s,%s,%s,%s,%s\n",i,p[i].pid,p[i].user,p[i].pr,p[i].ni,p[i].virt,p[i].shr);
                    i++;
                }
            pclose(pipe);  
            return i;
        }

 控制台打印:

1,root
2,root
3,root
5,root
7,root
8,root
10,root
11,root
12,root
13,root

 

posted @ 2018-05-21 14:57  一梦、  阅读(715)  评论(0编辑  收藏  举报