Linux proc文件系统

Linux系统上的/proc目录是一种文件系统,即proc文件系统。与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件系统),存储的是当前内核运行状态的一系列特殊文件,用户可以通过这些文件查看有关系统/内核信息及当前正在运行进程的信息,甚至可以通过更改其中某些文件来改变内核的运行状态,即通过proc与内核交互。注意只存在主存中不占用外存空间。

 

proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息。下面是一些重要的文件:

/proc/cpuinfo - CPU 的信息 (型号, 家族, 缓存大小等)

/proc/stat-文件包含了所有的CPU活动信息,包括了用户态CPU时间,nice值为负的进程CPU时间,核心时间,空闲时间

/proc/meminfo - 物理内存、交换空间等的信息

/proc/net/dev网络负载信息,从本机输出的数据包和流入本机的数据包

/proc/mounts - 已加载的文件系统的列表

/proc/devices - 可用设备的列表

/proc/filesystems - 被支持的文件系统

/proc/modules - 已加载的模块

/proc/version - 内核版本

时输入的内核命令行参数

更多的参考信息可以man proc。

下面看一个简单的内核配置:

允许ip转发: echo 1 > /proc/sys/net/ipv4/ip_forward (重定向)如果写进去的是零则取消相关配置。

禁止ip转发: echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

C示例程序读取CPU使用情况:

#include<stdio.h>
#include<unistd.h>//for system call like read function
#include<time.h>
#include<sys/types.h>
#include<string.h>
#include<stdlib.h>
#include<error.h>
struct cpustatus {
long total;
float user;
float nice;
float system;
float idle;
};

void errmsg(char *msg);
void get_cpu_status(struct cpustatus *cpu_stat);
void write_log(struct cpustatus *cpu_stat);

int main(int argc, char** argv)
{
struct cpustatus cpu_stat;
get_cpu_status(&cpu_stat);
printf("user\t nice\t system\t idle\n");
printf("%4.2f\t %4.2f\t %4.2f\t %4.2f\n",cpu_stat.user,cpu_stat.nice,cpu_stat.system,cpu_stat.idle);
write_log(&cpu_stat);
return 0;
}
//error message handle function
void errmsg(char *msg)
{
perror(msg);
exit(1);
}

//put cpu information into specific file
void write_log(struct cpustatus *cpu_stat) {
FILE *fp;
long seconds;
if((fp = fopen("cpustatuslog.txt","a+")) == NULL)
errmsg("open cpustatuslog.txt error\n");
else {
seconds = time(NULL);
fprintf(fp,"%s",ctime(&seconds));
fprintf(fp,"user\t nice\t system\t idle\n");
fprintf(fp,"%4.2f\t %4.2f\t %4.2f\t %4.2f\n",cpu_stat->user,cpu_stat->nice,cpu_stat->system,cpu_stat->idle);
fprintf(fp,"------------------------\n\n");
fclose(fp);
}
}

//get cpu status
void get_cpu_status(struct cpustatus *cpu_stat)
{
long 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"))//查找匹配字符串要包含string.h
sscanf(text,"%s %f %f %f %f", cpu, &user,&nice,&system,&idle); //把文件中的信息写到变量中去fclose(fp);
total = (user + nice + system + idle);
user =(user/total)*100;
nice = (nice/total)*100;
system = (system/total)*100;
idle = (idle/total)*100;
cpu_stat->total = total;
cpu_stat->user = user;
cpu_stat->nice = nice;
cpu_stat->system = system;
cpu_stat->idle = idle;
return ;
}

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值