`
CreazyApple
  • 浏览: 63920 次
  • 性别: Icon_minigender_1
  • 来自: 成都
文章分类
社区版块
存档分类
最新评论

读取linux /proc/文件信息,用GTK编程实现简单的系统管理器

阅读更多

源程序附最后(也可直接打包下载http://download.csdn.net/detail/creazyapple/4088149

要求:

理解和分析/proc文件

内容

了解/proc文件的特点和使用方法。

监控系统状态,显示系统中若干部件的使用情况。

用图形界面显示系统监控状态。

 

相关原理:

 

 

用户和应用程序可以通过/proc得到系统的信息,并可以改变内核的某些参数。由于系统的信息是动态改变的,所以用户或应用程序读取proc文件时,proc文件系统是动态从系统内核读出所需信息并提交的。

我们要显示系统信息,只需进行相应的文件操作。首先打开相应的文件,读取所需要的信息,将其写入一个缓冲区中,然后将缓冲区的内容加到Gtk的相应的控件上面去,最后将控件组合显示即可

/proc/文件结构参考:http://blog.csdn.net/ubuntulover/article/details/4449787

比如我们如果要读取cpu信息,可以在控制台下输入命令:cat /proc/cpuinf

 

要得到内存信息,可以输入命令:cat /proc/meminfo

这只是冰山一角,仅此我们已经看到/proc目录下文件内容之丰富。

要想编程读取这些信息,首先我们要了解/proc结构,了解其各种信息的排布,然后就像读普通文件一样将其筛选出来。

比如,查看系统的cpu频率,属于cpu信息:more /proc/cpuinfo (注,命令more 和cat功能相似,都是显示一个文件的内容)

其排布为如下:



我们也就知道,cpuinf文件中,一种信息放一行,因此我们一行一行的遴选信息。

首先需将cpuinf文件读出来,

 


然后进行字符串匹配,找到含有“cpu MHz”这个字符串的一行,读出来即可。

 

其它如模块信息、内存信息,类似处理,字要你了解了其结构,就可以方便的读出来

所以关键有3点:1、你知道信息在哪里;2、你看到了信息的排列方式;3、设计算法剔除无用信息。

 

而对于进程信息,稍复杂。

我们先看看进程信息放在哪里的:首先进入 /proc 目录并查看该目录下的文件:

蓝色的是目录(所谓的文件夹),绿色的是文件,文件中有cpuinf、meminfo等,我们之前已经看过。现在看看那些蓝色的以数字为名的文件夹,他们正是保存进程信息的!

目录1存储的是PID为1的进程的信息,目录2存储的是PID为2的进程的信息……

我们试着进入这些目录看看!

里面有一些目录和文件,其中有个status文件,打开看看:

看到了吧,很清晰地罗列出了进程1的信息,名字是init,状态Sleeping ,PID是1……

由此得知,要读取所有进程的信息列表,我们需要循环打开/proc文件夹下所有以数字命名的目录。

大致过程为:

 


好了,现在弄清楚了原理,就可以动手实现了。但是需要一个界面呀,这里我们继续用GTK来画界面。

 

关于GTK这里就不多说了。

最后实现界面截图:

杀死进程:

刷新列表:

 

最后,附上源程序。共11个文件,将其放入一个文件夹下,编译命令:gcc -o sb *.c `pkg-config --cflags --libs gtk+-2.0`(当然首先得配置好了GTK,

参考上一篇博客 ubuntu GTK+eclipse 配置 http://blog.csdn.net/creazyapple/article/details/7290443)

 

 












 

 

分享到:
评论

相关推荐

    linux 操作系统 GTK /proc文件 系统监视器

    在开发这样的系统监视器时,开发者需要编写代码来定时读取上述`/proc`文件,解析其中的数据,并通过GTK提供的控件将这些信息可视化。例如,使用GTK的进度条表示CPU或内存的使用率,用图表展示网络流量,或者使用列表...

    /proc 文件分析

    在本实验中,我们学习了 /proc 文件系统的基础知识,并使用 GTK 图形库来读取 /proc 文件系统,并将系统状态以图形化的形式显示出来。本实验可以帮助我们更好地理解 Linux 系统的工作原理,并提高我们的编程能力。

    linux下编程实现任务管理器

    `sysinfo()`函数可以提供系统的总体信息,而`/proc`文件系统则是一个虚拟文件系统,通过读取`/proc/stat`等文件,我们可以实时获取CPU使用率、内存利用率等信息。 其次,`gtk`标签表明该项目使用GTK+库来构建GUI。...

    基于缺页的Linux任务管理器设计与实现.pdf

    在传统的实现中,这些信息通过读取/proc文件系统或系统调用来获取。然而,这些方法对于实时监控内存行为,尤其是缺页现象,可能存在一定的延迟和不准确性。 缺页是由于虚拟地址到物理地址映射不命中导致的硬件中断...

    华中科技大学_操作系统原理课程设计_Linux任务管理器

    在华中科技大学的计算机操作系统课程设计中,学生们会被要求实现一个Linux任务管理器。这个项目旨在帮助学生深入理解操作系统的基本概念,特别是与进程管理和资源调度相关的部分。通过编写和调试"taskmgr.c"源代码,...

    C语言任务管理器

    在Linux下,`/proc`文件系统提供了一个接口来获取进程信息,例如`/proc/<pid>/status`包含了许多关于进程的统计信息。 6. **GUI界面**:虽然C语言本身不支持图形用户界面,但可以借助第三方库如GTK+、Qt或Windows ...

    仿windows任务管理器,c&linux

    在本文中,我们将深入探讨如何使用C语言和GTK+ 2.2库在Linux环境下创建一个仿Windows任务管理器的应用程序。这个应用旨在提供类似的功能,包括读取内核版本,监控CPU和内存使用情况,绘制使用率图表,以及管理和控制...

    操作系统课程设计—任务管理器

    操作系统课程设计—任务管理器是针对Linux环境开发的一款模拟Windows任务管理器的应用,它旨在提供一个用户友好的图形界面,以便用户能够监控和管理运行在Linux系统上的进程。这款任务管理器不仅具备基本的进程查看...

    Linux高级编程

    从给定的文件信息来看,这是一份关于“Linux高级编程”的资料目录,涉及了多个章节,涵盖了Linux编程的各个方面,从系统调用到进程管理,再到安全性和低级I/O操作等。以下是对各章节内容的详细解读与扩展: ### 1. ...

    华中科技大学操作系统课程设计报告

    首先,学生需要掌握Linux操作系统的基本使用技巧,这包括熟悉命令行操作、文件管理、进程控制等日常任务。其次,课程设计要求学生探索Linux系统内核的代码结构,这有助于理解操作系统的核心工作原理。最后,通过实际...

    操作系统课程设计 任务管理器

    3. **文件I/O**:用于读取系统文件如`/proc`目录下的信息,这些文件提供了系统状态的实时数据。 4. **C编程**:因为Linux系统调用通常是用C语言实现的,所以扎实的C语言基础是必要的。 5. **UI设计**:如果要实现...

    c语言做的一个任务管理器.zip

    而获取和显示系统资源使用情况(如CPU、内存)则可能涉及到`/proc`文件系统,这是Linux系统提供的一种虚拟文件系统,其中包含了关于系统状态和进程信息的数据。 对于进程的监控,开发者可能通过读取`/proc/<pid>/...

    嵌入式操作系统课设报告_王英嘉1

    在这个阶段,学生需要熟悉Linux命令行操作,学习使用`read`和`write`等系统调用来实现文件操作。`read`系统调用用于从文件或设备读取数据,`write`则用于将数据写入文件或设备。通过这两个基本调用,可以构建基础的...

    c语言做的一个任务管理器

    总之,用C语言实现任务管理器是一项挑战性的实践项目,它能锻炼我们的系统编程能力,提升对计算机底层工作原理的认识。同时,这也是一个极好的学习机会,让我们能够亲手构建一个实用的系统工具,体验从零开始到完成...

    linuxmon:C++ 中的 Linux 监视器(文件、进程、网络连接...)

    Linuxmon 是一个用 C++ 编写的 Linux 系统监视工具,它允许用户监控系统级别的信息,如文件活动、进程状态以及网络连接等。在深入探讨这个项目之前,我们需要了解 C++ 语言基础以及 Linux 系统编程的相关概念。 1. ...

    c语言做的一个任务管理器.rar

    通过读取`/proc/<pid>/stat`文件,我们可以获取到进程的运行时间、内存使用情况等信息。 3. **信号处理**:C语言中的`<signal.h>`头文件定义了信号处理机制,如`raise()`用于发送信号,`signal()`用于设置信号处理...

    操作系统课程设计报告

    - **系统状态监控**:通过读取/proc目录下的文件,可以监控系统的状态,例如CPU使用率、内存使用情况等。学生需要学会如何解析这些文件中的数据,并将其可视化展示出来。 - **图形化界面实现**:使用图形库(如GTK...

Global site tag (gtag.js) - Google Analytics