操作系统实验11 Linux proc文件系统
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《操作系统》实验报告
实验序号:实验十一实验项目名称:Linux proc文件系统
学号1207022103 姓名陈华荣专业、班1班
实验地点实1-311 指导教师李桂森实验时间2014-12-17 一、实验目的
通过本实验的学习,使学生掌握Linux 系统Web服务器的配置方法,搭建简单的动态数据网站。
二、实验内容
实验内容:实践Linux系统Web服务器的配置操作,并搭建简单的动态网站。
三、实验内容与步骤
1,查看/proc 目录,了解此目录下各个目录以及文件的含义;解释以下文件的含义:
proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。
下面是一些重要的文件:
* /proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)
* /proc/meminfo - 物理内存、交换空间等的信息
* /proc/mounts - 已加载的文件系统的列表
* /proc/devices - 可用设备的列表
* /proc/filesystems - 被支持的文件系统
* /proc/modules - 已加载的模块
* /proc/version - 内核版本
* /proc/cmdline - 系统启动时输入的内核命令行参数
* /proc/XXX – XXX是指以数字编号的目录,有不少这样的目录,每一个目录表示
一个进程(即线程组)
* /proc/sys –可以修改的系统信息
* /proc/swaps - 要获知swap空间的使用情况
* /proc/uptime - 获取系统的正常运行时间
* /proc/fs/nfsd/exports - 列出由NFS共享的文件系统
* /proc/kmsg –该文件被作为内核日志信息源,它可以被作为一个系统信息调用的接口使用。
* /proc/kcore –该文件提供了以内核文件格式形式访问系统物理内存,并且可以被gdb用于检查任意内核数据结构的当前状态。
如果装了源码,那么可以通过查看/usr/src/linux/Documentation/filesystems/proc.txt文件来获取更多的信息。
/proc/kcore文件是系统物理内存的映像
2,从proc文件系统获取信息
通过读取proc文件系统,获取系统各种信息,包括主机名、系统启动时间、版本号、所有进程信息等
主机名
系统启动时间:/proc/uptime
版本号:/proc/version
3,从proc中获取相关信息,分别编程计算并显示cpu的使用率、主存的使用率和网
络利用率。
注:这些数据分别要从/proc/stat、/proc/net/dev、/proc/meminfo三个文件中提取,要求实时监测(周期性显示)
选做:利用图形界面编程,实现类似Windows资源管理器的效果。
#include<stdio.h>
#include<unistd.h>
#include<time.h>
#include<sys/types.h>
/*声明结构体*/
struct cpustatus
{
long total;
float user;
float nice;
float system;
float idle;
};
struct netstatus
{
long total;
float bytes;
float packets;
float errs;
float drop;
};
struct memstatus
{
unsigned int MemTotal;
float MemFree;
};
/*计算CPU利用率*/
void get_cpu_status(struct cpustatus *cpu_stat)
{
unsigned int total;
float user;
float nice;
float system;
float idle;
char cpu[21];
char text[201];
FILE *fp;
fp=fopen("/proc/stat","r");
while(fgets(text,200,fp))
if(strstr(text,"cpu"))
sscanf(text,"%s %f %f %f %f",cpu,&user,&nice,&system,&idle);
fclose(fp);
total=(user+nice+system+idle);
user=((user+system)/total)*100;
cpu_stat->total=total;
cpu_stat->user=user;
cpu_stat->nice=nice;
cpu_stat->system=system;
cpu_stat->idle=idle;
return;
}
/*计算net利用率*/
void get_net_status(struct netstatus *net_dev)
{
unsigned int total;
float bytes;
float packets;
float errs;
float drop;
char net[21];
char text[201];
FILE *fp;
fp=fopen("/proc/net/dev","r");
while(fgets(text,200,fp))
if(strstr(text,"eth0"))
sscanf(text,"%s %f %f %f %f",net,&bytes,&packets,&errs,&drop);
fclose(fp);
total=(bytes+packets+errs+drop);
bytes=(bytes/total)*100;
net_dev->total=total;
net_dev->bytes=bytes;
net_dev->packets=packets;
net_dev->errs=errs;
net_dev->drop=drop;
return;
}
/*计算mem利用率*/
void get_mem_infous(struct memstatus *mem_info) {
float MemTotal;
float MemFree;
char mem[20];
char text1[500];
char text2[500];
char text3[500];
FILE *fp;
fp=fopen("/proc/meminfo","r");
while(fgets(text1,500,fp))
while(fgets(text2,500,fp))
while(fgets(text3,500,fp))
if(strstr(text1,"MemTotal"))
sscanf(text1,"%s %f",mem,&MemTotal);
if(strstr(text2,"MemFree"))
sscanf(text2,"%s %f",mem,&MemFree);
fclose(fp);
MemFree=((MemTotal-MemFree)/MemTotal)*100;
mem_info->MemTotal=MemTotal;
mem_info->MemFree=MemFree;
}
/*主函数*/
int main(int ac,char*av[])
{
struct cpustatus cpu_stat;
struct netstatus net_dev;
struct memstatus mem_info;
while(1)
{
get_cpu_status(&cpu_stat);
get_mem_infous(&mem_info);
get_net_status(&net_dev);
printf("CPU Use\tNet Use\tMemory Use\n");
printf("%4.2f\t%4.2f\t%4.2f\t\n",cpu_er,net_dev.bytes,mem_info.M emFree);
sleep(2);
}
return 0;
}
四、实验心得体会
由于linux下c的编写困难。
建议现在外面window下写好c程序,然后再挂载到linux 下编译运行。
不容易出错。
成绩
五、教师评语
签名:
日期:。