proc文件系统是一个虚拟的文件系统,用使用man proc命令上对proc的描述来说就是一个伪文件系统,它提供了一些内核数据结构的接口。通常该文件系统被挂载在/proc目录下,通常情况下他是只读的,但是一些文件也允许一些内核变量去修改。
下面我列举几个例子:
cat /proc/couinfo
这里是我的一些输出:
cat /proc/meminfo
下面是输出:
proc文件系统中还有很多可以获取一些有用信息的文件
可以使用man proc对proc文件系统进行一个整体的了解。
下面基于对proc文件系统的了解,我使用C语言来获取当前系统中的一些信息,包括:
| 问题A |
| 1:CPU类型 |
| 2:内核版本 |
| 问题B |
| 1:系统运行时间 |
| 问题C |
| 1:cpu状态 |
| 2:磁盘请求数 |
| 3:上下文切换次数 |
| 4:进程总数 |
| 问题D |
| 1:内存总量 |
| 2:可用内存 |
| 3:系统平均负荷 |
下面是我的代码:
#include <stdio.h>
#include <sys/time.h>
#include <string.h>
#include <stdlib.h>
FILE *thisProcFile;
void CPUinfo()
{
char s[1000];
char gu[10] = "model name";
if((thisProcFile = fopen("/proc/cpuinfo","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
while(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s,":");
if(strncmp(s,gu,10) == 0)
{
temp = strtok(NULL,":");
printf("CPU类型: %s\n",temp);
fclose(thisProcFile);
return;
}
}
}
void Kernel_version()
{
char s[1000];
if((thisProcFile = fopen("/proc/version","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
printf("内核版本信息为: \n");
while(!feof(thisProcFile))
{
if(fgets(s,100,thisProcFile) != NULL)
printf("%s",s);
}
fclose(thisProcFile);
}
void time_run()
{
char s[100];
if((thisProcFile = fopen("/proc/uptime","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
if(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s," ");
int times = atoi(temp);
int run_days = times / 86400;
int run_hours = (times % 86400) / 3600;
int run_minutes = (times % 3600) / 60;
int run_seconds = (times % 60);
printf("系统运行时间为: %d天%d时%d分%d秒\n",run_days,run_hours,run_minutes,run_seconds);
}
fclose(thisProcFile);
}
void sampleLoadAvg(){
char s[100];
if((thisProcFile = fopen("/proc/loadavg","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
fgets(s,100,thisProcFile);
fclose(thisProcFile);
char *temp = strtok(s," ");
char *array[5];
int m = 0;
while(temp != NULL){
array[m] = temp;
temp = strtok(NULL," ");
m++;
}
printf("一分钟之内的平均进程数为: %s\n",array[0]);
printf("五分钟之内的平均进程数为: %s\n",array[1]);
printf("十五分钟之内的平均进程数为: %s\n",array[2]);
printf("正在运行进程数/进程总数: %s\n",array[3]);
printf("最近运行的进程ID: %s\n",array[4]);
fclose(thisProcFile);
}
void cpu_state()
{
char s[1000];
if((thisProcFile = fopen("/proc/stat","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
if(fgets(s,1000,thisProcFile) != NULL)
{
char *temp = strtok(s," ");
char *array[11];
int m = 0;
while(temp != NULL){
array[m] = temp;
temp = strtok(NULL," ");
m++;
}
printf("CPU执行用户态所用的时间: %s jiffies\n",array[1]);
printf("CPU执行系统态所用的时间: %s jiffies\n",array[3]);
printf("CPU执行空闲态所用的时间: %s jiffies\n",array[4]);
}
fclose(thisProcFile);
}
void ctxt()
{
char s[1000];
char gu[4] = "ctxt";
if((thisProcFile = fopen("/proc/stat","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
while(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s," ");
if(strncmp(s,gu,4) == 0)
{
temp = strtok(NULL," ");
printf("上下文切换的次数为: %s\n",temp);
fclose(thisProcFile);
return;
}
}
}
void processes()
{
char s[1000];
char gu[9] = "processes";
if((thisProcFile = fopen("/proc/stat","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
while(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s," ");
if(strncmp(s,gu,9) == 0)
{
temp = strtok(NULL," ");
printf("创建的进程数为: %s\n",temp);
fclose(thisProcFile);
return;
}
}
}
void MemTotal()
{
char s[100];
char gu[8] = "MemTotal";
if((thisProcFile = fopen("/proc/meminfo","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
while(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s,":");
if(strncmp(s,gu,8) == 0)
{
temp = strtok(NULL,":");
printf("内存总量为: %s\n",temp);
fclose(thisProcFile);
return;
}
}
}
void MemFree()
{
char s[100];
char gu[7] = "MemFree";
if((thisProcFile = fopen("/proc/meminfo","r")) == NULL)
{
printf("%s\n","Open file failed!!");
exit(0);
}
while(fgets(s,100,thisProcFile) != NULL)
{
char *temp = strtok(s,":");
if(strncmp(s,gu,7) == 0)
{
temp = strtok(NULL,":");
printf("可用内存为: %s\n",temp);
fclose(thisProcFile);
return;
}
}
}
int main(int argc,char *argv[])
{
char in;
printf("=========================================\n");
printf("| 请输入要查看的问题: |\n");
printf("| 问题A |\n");
printf("| 1:CPU类型 |\n");
printf("| 2:内核版本 |\n");
printf("| 问题B |\n");
printf("| 1:系统运行时间 |\n");
printf("| 问题C |\n");
printf("| 1:cpu状态 |\n");
printf("| 2:磁盘请求数 |\n");
printf("| 3:上下文切换次数 |\n");
printf("| 4:进程总数 |\n");
printf("| 问题D |\n");
printf("| 1:内存总量 |\n");
printf("| 2:可用内存 |\n");
printf("| 3:系统平均负荷 |\n");
printf("=========================================\n");
scanf("%c",&in);
if(in == 'A'){
CPUinfo();
Kernel_version();
}else if(in == 'B'){
time_run();
}else if(in == 'C'){
cpu_state();
ctxt();
processes();
}else if(in == 'D'){
MemTotal();
MemFree();
sampleLoadAvg();
}
}
下面是我的几个输出截图:
<script type="text/javascript">
$(function () {
$('pre.prettyprint code').each(function () {
var lines = $(this).text().split('\n').length;
var $numbering = $('<ul/>').addClass('pre-numbering').hide();
$(this).addClass('has-numbering').parent().append($numbering);
for (i = 1; i <= lines; i++) {
$numbering.append($('<li/>').text(i));
};
$numbering.fadeIn(1700);
});
});
</script>
版权声明:本文为博主原创文章,未经博主允许不得转载。
分享到:
相关推荐
使用 proc 文件系统来访问 Linux 内核的内容使用 proc 文件系统来访问 Linux 内核的内容使用 proc 文件系统来访问 Linux 内核的内容使用 proc 文件系统来访问 Linux 内核的内容使用 proc 文件系统来访问 Linux 内核...
linux proc文件系统简介 linux proc文件系统简介
linux Proc 文件系统 内核对Proc 文件系统的函数
调用了linux内核提供的操作proc文件系统接口的函数,一个小例子。
proc 文件系统 proc 文件系统 proc 文件系统 proc 文件系统 proc 文件系统
主要内容是:详细讲解linux的proc文件系统
这是在Linux操作系统的Proc虚拟文件系统下建立文件并管理文件的内容,是我们的一个课程设计。我们建立了三个文件用于饭店系统管理。一个是菜单,一个是会员还有一个根目录。本程序适用于初学者学习proc文件系统。
linux proc文件系统详解 资源收集
关于proc文件系统的实现。这个是07级哈尔滨工业大学操作系统实验的辛勤劳动,下面的压缩包中包含源代码,及实验报告,最好自己搭建平台,本人在电脑中又装了 linux,希望给感兴趣的人看看,呵呵,如果是工大的学弟...
通过读取/proc文件,获得系统信息 监控系统状态,显示系统中若干部件的使用情况。 用GTK库的图形界面显示系统监控状态。
实验八-proc文件系统的实现,一、问题回答 1.如果要求你在psinfo之外再实现另一个结点,具体内容自选,那么你会实现一个给出什么信息的结点?为什么? 答:我会给出CPU的当前信息。因为CPU的信息也是一个重要的...
在linux下,如何使用proc文件系统与内核态进行通信,介绍proc程序的一般写法。
linux下读取/proc获得系统信息 监控系统状态,显示系统中若干部件的使用情况。 用GTK库实现图形界面显示系统监控状态
Linux操作系统内核实验--proc文件系统实验: 问题A: 提取 1、cpu类型 2、内核版本 问题B: 1、启动以来经历的时间,以dd:hh:mm:ss报告 问题C: 1、cpu执行用户态、系统态、空闲态所用时间 2、多少次磁盘请求 3、多少...
哈工大软件学院操作系统实验7——Proc文件系统实现 上传的文件夹中包含了提交的代码和实验报告哦
Linux下Proc文件系统的编程剖析.pdf
/proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux® 内核空间和用户空间之间进行通信。在 /proc 文件系统中,我们可以将对虚拟文件的读写作为与内核中实体进行通信的一种手段,但是与普通文件...
在linux的命令行下获取当前网络环境的gateway的IP并不是一件难事,常用的命令有 ip route或者 route -n,route -n 是通过读取proc文件系统下的文件来从内核获取路由表的,但 ip route 是通过netlink来获取的路由表;...
实验题目: 模块参数及Proc文件系统 一、实验目的 1.掌握简单字符设备驱动程序中模块参数及Proc文件系统的编写方法。 2.学习利用模块参数进行驱动程序参数传递,学习利用Proc文件系统进行数据读写。 二、实验...