/*
* =====================================================================================
*
* Filename: proc_more.c
*
* Description:
*
* Version: 1.0
* Created: 2013年08月07日 11时34分40秒
* Revision: none
* Compiler: gcc
*
* Author: linkscue (scue), linkscue@gmail.com
* Organization:
*
* =====================================================================================
*/ #include <stdio.h>
#include <sys/time.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <string.h>
void sampleLoadAvg(){
int f=;
char buffer[]=""; /* 定义字符串并初始化为'\0' */
char buf[][];
char *file="/proc/loadavg";
f = open(file, O_RDONLY);
if (f == )
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
read(f, (void *)buffer, );
sscanf(buffer, "%s %s %s %s %s", /* sscanf()拆分成多个字符串 */
&buf[],&buf[],&buf[],&buf[],&buf[]);
printf("一分钟平均负载:%s\n", buf[]);
printf("五分钟平均负载:%s\n", buf[]);
printf("一刻钟平均负载:%s\n", buf[]);
printf("采样时刻的间隔:%s\n", buf[]);
printf("最大线程的数目:%s\n", buf[]);
close(f);
}
void sampleTime(){
int f=;
char buffer[]="";
char buf[][];
float seconds=;
float secondr=;
char *file="/proc/uptime";
f = open(file, O_RDONLY);
if (f == )
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
read(f, (void *)buffer, );
sscanf(buffer, "%s %s", &buf[], &buf[]);
close(f);
printf("系统运行时间:\t%s秒\n", buf[]);
printf("系统空闲时间:\t%s秒\n", buf[]);
close(f);
seconds=strtof(buf[],NULL);
secondr=strtof(buf[],NULL);
printf("系统运行时间:\t%03d天%02d时%02d分%02.6f秒\n",
(int)seconds/(*), /* 天 */
((int)seconds/())%(), /* 时 */
((int)seconds/)%, /* 分 */
((int)seconds%)+(seconds-(int)seconds)); /* 秒(精确至毫秒) */
printf("系统空闲时间:\t%03d天%02d时%02d分%02.6f秒\n",
(int)secondr/(*), /* 天 */
((int)secondr/())%(), /* 时 */
((int)secondr/)%, /* 分 */
((int)secondr%)+(secondr-(int)secondr)); /* 秒(精确至毫秒) */
} void sampleKernelVersion(){
int f=;
char buffer[]="";
char *file="/proc/sys/kernel/version";
f = open(file, O_RDONLY);
if (f == )
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
read(f, (void *)buffer, );
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
printf("当前内核版本:\t%s\n", buffer);
close(f);
} void sampleOsRelease(){
int f=;
char buffer[]="";
char *file="/proc/sys/kernel/osrelease";
f = open(file, O_RDONLY);
if (f == )
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
read(f, (void *)buffer, );
buffer[strlen(buffer)-]=;
printf("当前发行版本:\t%s\n", buffer);
close(f);
} void sampleOsType(){
int f=;
char buffer[]="";
char *file="/proc/sys/kernel/ostype";
f = open(file, O_RDONLY);
if (f == )
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
read(f, (void *)buffer, );
buffer[strlen(buffer)-]=;
printf("当前操作系统:\t%s\n", buffer);
close(f);
} void sampleDiskStat(){
int i;
FILE *fp;
int nread=;
ssize_t len = ;
char *buffer=NULL;
char buf[][];
char *file="/proc/diskstats";
char *p;
fp = fopen(file, "rb");
if (fp == NULL)
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
printf(" 磁盘 读次数 写次数\n");
while((nread = getline(&buffer, &len, fp)) != -) { /* 简单实现读行的功能 */
sscanf(buffer, "%04s%08s%s %s %s %s %s %s %s %s %s %s %s %s",
&buf[],&buf[],&buf[],&buf[],&buf[],&buf[],&buf[],
&buf[],&buf[],&buf[],&buf[],&buf[],&buf[],&buf[]);
if ((p=strstr(buf[], "loop"))!=NULL)
{
; /* loop本地回路不作操作 */
}
else {
printf("%06s%08s%08s\n",
&buf[],&buf[], &buf[]);
}
}
} void sampleProcesses(void)
{
FILE *fp;
int nread=;
ssize_t len = ;
char *buf=NULL;
char *buffer=NULL;
char *file="/proc/stat";
fp = fopen(file, "rb");
if (fp == NULL)
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
while((nread = getline(&buffer, &len, fp)) != -) {
if((buf=strstr(buffer, "processes"))!=NULL) /* 简单实现grep的功能 */
break;
}
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
char count[]="";
sscanf(buffer, "%s%s", count, count);
printf("执行线程数目:\t%s\n", count);
} void sampleContext(void)
{
FILE *fp;
int nread=;
ssize_t len = ;
char *buf=NULL;
char *buffer=NULL;
char *file="/proc/stat";
fp = fopen(file, "rb");
if (fp == NULL)
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
while((nread = getline(&buffer, &len, fp)) != -) {
if((buf=strstr(buffer, "ctxt"))!=NULL) /* 简单实现grep的功能 */
break;
}
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
char count[]="";
sscanf(buffer, "%s%s", count, count);
printf("上下文切换次数:\t%s\n", count);
} void sampleMeminfo()
{
FILE *fp;
int nread=;
ssize_t len = ;
char *buf=NULL;
char *buffer=NULL;
char *file="/proc/meminfo";
char content[]="";
fp = fopen(file, "rb");
if (fp == NULL)
{
printf("error to open: %s\n", file);
exit(EXIT_FAILURE);
}
while((nread = getline(&buffer, &len, fp)) != -) {
if((buf=strstr(buffer, "MemTotal"))!=NULL) /* 简单实现grep的功能 */
{
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
sscanf(buffer, "%s%s", content, content);
int memtotal_kb=(int)(strtof(content, NULL));
printf("内存总容量:\t%dG%4dM %4dK\n",
memtotal_kb/(*), /* Gb */
(memtotal_kb/())%, /* Mb */
(memtotal_kb%(*))%); /* Kb */
}
if((buf=strstr(buffer, "MemFree"))!=NULL) /* 简单实现grep的功能 */
{
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
sscanf(buffer, "%s%s", content, content);
int memfree_kb=(int)(strtof(content, NULL));
printf("内存可用容量:\t%dG%4dM %4dK\n",
memfree_kb/(*), /* Gb */
(memfree_kb/())%, /* Mb */
(memfree_kb%(*))%); /* Kb */
}
if((buf=strstr(buffer, "SwapTotal"))!=NULL) /* 简单实现grep的功能 */
{
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
sscanf(buffer, "%s%s", content, content);
int swaptotal_kb=(int)(strtof(content, NULL));
printf("SWAP总容量:\t%dG%4dM %4dK\n",
swaptotal_kb/(*), /* Gb */
(swaptotal_kb/())%, /* Mb */
(swaptotal_kb%(*))%); /* Kb */
}
if((buf=strstr(buffer, "SwapFree"))!=NULL) /* 简单实现grep的功能 */
{
buffer[strlen(buffer)-]=; /* 简单实现tr()函数的功能 */
sscanf(buffer, "%s%s", content, content);
int swapfree_kb=(int)(strtof(content, NULL));
printf("SWAP可用容量:\t%dG%4dM %4dK\n",
swapfree_kb/(*), /* Gb */
(swapfree_kb/())%, /* Mb */
(swapfree_kb%(*))%); /* Kb */
break; /* 所需的信息已满足,退出循环 */
}
}
}
/*
* === FUNCTION ======================================================================
* Name: main
* Description:
* =====================================================================================
*/
int main ( int argc, char *argv[] )
{
printf(">>>系统负载<<<\n");
sampleLoadAvg();
printf("----------------------------------------\n");
printf("\n");
printf(">>>运行时间<<<\n");
sampleTime();
printf("\n");
printf(">>>版本信息<<<\n");
sampleOsType();
sampleOsRelease();
sampleKernelVersion();
printf("----------------------------------------\n");
printf("\n");
printf(">>>磁盘信息<<<\n");
sampleDiskStat();
printf("----------------------------------------\n");
printf("\n");
printf(">>>上下文切换<<<\n");
sampleContext();
printf("----------------------------------------\n");
printf("\n");
printf(">>>线程数目<<<\n");
sampleProcesses();
printf("----------------------------------------\n");
printf("\n");
printf(">>>内存信息<<<\n");
sampleMeminfo();
printf("----------------------------------------\n");
return EXIT_SUCCESS;
}

〖Linux〗proc的一些文件读取操作的更多相关文章

  1. Perl中文件读取操作

    Perl中文件读取操作 http://blog.csdn.net/yangxuan12580/article/details/51506216

  2. Linux系统编程:简单文件IO操作

    使用Linux的文件API,经常看见一个东西,叫做文件描述符. 什么是文件描述符? (1)文件描述符其实实质是一个数字,这个数字在一个进程中表示一个特定的含义,当我们open打开一个文件时,操作系统在 ...

  3. Linux学习笔记之文件读取过程

    0x00 概述 对于Linux系统来说,一切的数据都起源于磁盘中存储的文件.Linux文件系统的结构及其在磁盘中是如何存储的?操作系统是怎样找到这些文件进行读取的?这一章主要围绕这几个问题进行介绍(以 ...

  4. 【Linux 应用编程】文件IO操作 - 常用函数

    Linux 系统中的各种输入输出,设计为"一切皆文件".各种各样的IO统一用文件形式访问. 文件类型及基本操作 Linux 系统的大部分系统资源都以文件形式提供给用户读写.这些文件 ...

  5. java 的文件读取操作

    /** * @param filePath 文件的全路径 * 返回我们读取到的文件内容 * **/ public static String readFile(String filePath) { F ...

  6. python文件读取操作、序列化

    1.对文件进行读写操作时,先建立文件句柄 f = open("test.txt","r",encoding="UTF-8") 其中,r为文件 ...

  7. linux c编程:文件的操作

    在Linux系统中,系统是通过inode来获得这个文件的信息.在Linux系统中,inode的信息都是封装在stat这个结构体中.可以通过man 2 stat来查看stat的具体结构.从中可以看到包含 ...

  8. PHP大文件读取操作

    简单的文件读取,一般我们会使用 file_get_contents() 这类方式来直接获取文件的内容.不过这种函数有个严重的问题是它会把文件一次性地加载到内存中,也就是说,它会受到内存的限制.因此,加 ...

  9. linux学习笔记一----------文件相关操作

    一.目录结构 二.文件管理操作命令(有关文件夹操作,使用Tab键自动补全文件名(如果多个默认第一个)) 1.ls 查看目录信息:ls -l 查看目录详细信息(等价于ll 某些系统不支持) 2.pwd ...

随机推荐

  1. [COGS2426][HZOI 2016]几何

    [COGS2426][HZOI 2016]几何 题目大意: 给定平面坐标系内\(n\)个整点,求这些整点能构成的正多边形的边数的最大值. 思路: 一个基本结论:平面直角坐标系内能够形成的正多边形一定是 ...

  2. hdu 3572 资源分配

    资源分配,每个时间点有m个机器可用,要将这资源分配给n个任务中的一些,要求每个任务在自己的时间范围中被分配了p[i]个资源,建图: 建立源,与每个时间点连边,容量为m,每个任务向其对应的时间段中的每个 ...

  3. sqlserver -- 学习笔记(二)“SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问”解决方法

    将数据表导出到excel时出现下面错误: SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而 ...

  4. css选择器:first-child和nth-child 采坑记

    今天想用nth-child来给一个类似于树的目录(bootstrap-nav-tree  一个angularjs插件)设置不同的颜色,结构大致类似于 <ul> <li class=& ...

  5. Add margining capability to a dc/dc converter

    You can easily add margining capability—that is, the ability to digitally adjust the output voltage— ...

  6. 使用Vue.js和Axios从第三方API获取数据 — SitePoint

    更多的往往不是,建立你的JavaScript应用程序时,你会想把数据从远程源或消耗一个[ API ](https:/ /恩.维基百科.org /维基/ application_programming_ ...

  7. 如何编译Linux内核

    内核,是一个操作系统的核心.它负责管理系统的进程.内存.设备驱动程序.文件和网络系统,决定着系统的性能和稳定性.Linux作为一个自由软件,在广 大爱好者的支持下,内核版本不断更新.新的内核修订了旧内 ...

  8. dwz关闭当前dialog

    首先,前台代码如下: <form method="post" class="pageForm required-validate" onsubmit=&q ...

  9. MySQL模糊查询(like)时区分大小写

    问题说明:通过上面的语句,你会发现MySQL的like查询是不区分大小写的,因为我的失误,把Joe写成了joe才发现了这个东东吧.但是,有时候,我们需要区分大小写的是,该怎么办呢?解决方法如下: 方法 ...

  10. @Redis Desktop Manager无法连接虚拟机中启动的redis服务问题解决

    Redis Desktop Manager下载地址 https://redisdesktop.com/download 安装好以后连接linux服务器上的Redis服务器错误: 问题排查: 1.检查R ...