该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
#include
#include
#include
#include
#include
#define PATH1 "/proc/meminfo"
#define PATH2 "/proc/cpuinfo"
#define PATH3 "/proc/version"
#define PATH4 "/proc/bus/usb/devices"
struct Mem
{
char *n;
int data;
};
void Exit()
{
exit(1);
}
char* montage(char *a, char *b) {
char *temp = malloc(strlen(a) + strlen(b) + 1);
if (temp == NULL)
exit(1);
strcpy(temp, a);
strcat(temp, b);
return temp;
}
void ShowCpuInfo()
{
FILE *fp;
int n;
char c;
char filename[] = PATH2;
if((fp = fopen(filename,"r")) == NULL)
{
printf("cannot open file %s.\n",filename);
exit(1);
}
while((c=fgetc(fp))!=EOF)
{
putchar(c);
}
printf("\n");
fclose(fp);
printf("请输入0返回主菜单\n");
scanf("%d",&n);
if(n==0)
{ system("clear");
main();
}
}
void ShowBusInfo()
{
FILE *fp;
int n;
char c;
char filename[] = PATH4;
if((fp = fopen(filename,"r")) == NULL)
{
printf("cannot open file %s.\n",filename);
exit(1);
}
while((c=fgetc(fp))!=EOF)
{
putchar(c);
}
printf("\n");
fclose(fp);
printf("请输入0返回主菜单\n");
scanf("%d",&n);
if(n==0)
{
system("clear");
main();
}
}
void ShowSoftwareInfo()
{
FILE *fp;
int n;
char c;
char filename[] = PATH3;
if((fp = fopen(filename,"r")) == NULL)
{
printf("cannot open file %s.\n",filename);
exit(1);
}
while((c=fgetc(fp))!=EOF)
{
putchar(c);
}
printf("\n");
fclose(fp);
printf("请输入0返回主菜单\n");
scanf("%d",&n);
if(n==0)
{
system("clear");
main();
}
}
void MonitoringSystem(struct Mem mem[])
{
FILE *fp;
int n;
int mem_total=-1;
char name[100];
char data[30][100];
int m=0;
char filename[] = PATH1;
if((fp = fopen(filename,"r")) == NULL)
{
printf("cannot open file %s.\n",filename);
exit(1);
}
for(m=0;m<30;m++)
{
fgets(data[m],sizeof(data[m]),fp);
}
fclose(fp);
for(m=0;m<30;m++)
{
sscanf(data[m],"%s%d",name,&mem_total);
mem[m].data=mem_total;
mem[m].n=name;
}
printf("\n");
fclose(fp);
printf("请输入0返回主菜单\n");
scanf("%d",&n);
if(n==0)
{
system("clear");
main();
}
}
void MonitoringProcess()
{
FILE *fp;
char *p;
char c;
int n;
char pid[20];
printf("请输入要查看的进程号:");
scanf("%s",pid);
p = malloc(sizeof(char));
p="/";
/*p=join(p,"/");*/
p=montage(p,"proc");
p=montage(p,"/");
p=montage(p,pid);
p=montage(p,"/");
p = montage(p,"status.txt");
if((fp = fopen(p, "r")) == NULL)
{
printf("cannot open file %s.\n",p);
exit(1);
}
while((c=fgetc(fp))!=EOF)
{
putchar(c);
}
printf("\n");
fclose(fp);
printf("请输入0返回主菜单\n");
scanf("%d",&n);
if(n==0)
{
system("clear");
main();
}
}
int main()
{
int a;
struct Mem mem[30];
printf("\n****************系统信息显示与检测*****************\n");
printf("\n 1.显示cpu信息\n");
printf(" 2.显示bus信息\n");
printf(" 3.显示软件信息\n");
printf(" 4.监测系统内存信息\n");
printf(" 5.监测进程内存信息\n");
printf(" 0.退出\n");
printf("\n*****************************************************\n");
scanf("%d",&a);
switch(a)
{
case 1:ShowCpuInfo();break;
case 2:ShowBusInfo();break;
case 3:ShowSoftwareInfo();break;
case 4:MonitoringSystem(mem);
printf(" Total\n");
printf("Mem: %d\n",mem[1].data);
printf("Swap: %d\n",mem[2].data);
printf("MemTotal: %d kB\n",mem[3].data);
printf("MemFree: %d kB\n",mem[4].data);
printf("MemShared: %d kB\n",mem[5].data);
printf("Buffers: %d kB\n",mem[6].data);
printf("Cached: %d kB\n",mem[7].data);
printf("SwapCached: %d kB\n",mem[8].data);
break;
case 5:MonitoringProcess();break;
case 0:Exit();break;
}
}