一、引言
Proc文件系统,以文件系统的形式向用户提供系统当前状态,动态地从同内核中读出所需的信息,只存在内存中,不占用外存空间。
二、实验内容
问题A:
1、cpu类型
2、内核版本
问题B:
1、系统启动以来的时间,以dd:hh:mm:ss报告
问题C:
1、cpu执行用户态、系统态、空闲态所用时间
2、多少次磁盘请求
3、多少次上下文切换
4、启动了多少次进程
问题D:
1、内存总量
2、可用内存
3、系统平均负荷
三、实验代码
/*****************************************
*
* Proc 文件系统
*
* Copyright: (C) 2018.3.31 by shaomingshan
*
* Compile: gcc -o main main.c
*
* Execute: ./main -a
*
*****************************************/
#include <stdio.h>
#include <sys/time.h>
#include <unistd.h>
#include <string.h>
#include <stdlib.h>
#define LB_SIZE 80
enum TYPE{STANDARD,SHORT,LONG};
FILE *thisProcFile; //Proc 打开文件指针
struct timeval now; //系统时间日期
enum TYPE reportType; //观察报告类型
char repTypeName[16];
char *lineBuf; //proc 文件读出行缓冲
int interval; //系统负荷监测时间间隔
int duration; //系统负荷监测时段
int iteration;
char c1,c2; //字符处理单元
void sampleLoadAvg() { //观察系统负荷
int i=0;
//打开负荷文件
if ((thisProcFile = fopen("/proc/loadavg", "r")) == NULL)
{
printf("Open Failed\n");
return;
}
//读出、处理读出行,如去除前导空格和无用空格
fgets(lineBuf, LB_SIZE+1, thisProcFile);
char * c3 = strtok(lineBuf, " ");
//将读出行分出不同字段,按照字段的不同含义处理为可阅读格式
//打印处理好的信息内容
while (c3 != NULL) {
i ++;
switch (i) {
case 1:
printf("1分钟内平均负载: ");
break;
case 2:
printf("5分钟内平均负载: ");
break;
ca