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
.