proc文件系统

  1 #include <linux/module.h>
  2 #include <linux/types.h>
  3 #include <linux/kernel.h>
  4 #include <linux/init.h>
  5 #include <linux/random.h>
  6 #include <linux/slab.h>
  7 #include <linux/proc_fs.h>
  8 #include <linux/seq_file.h>
  9 #include <linux/list.h>
 10
 11 struct mylist_random {
 12     struct list_head list;
 13     char info[50];
 14 };
 15
 16 static LIST_HEAD(test_list);
 17
 18 static void *seq_start(struct seq_file *m, loff_t *pos)
 19 {
 20     return seq_list_start(&test_list, *pos);;
 21 }
 22
 23 static void seq_stop(struct seq_file *m, void *v)
 24 {
 25     /* No cleanup needed in this example */
 26 }
 27
 28 static void *seq_next(struct seq_file *m, void *v, loff_t *pos)
 29 {
 30     return seq_list_next(v, &test_list, pos);
 31 }
 32
 33 static int seq_show(struct seq_file *m, void *v)
 34 {
 35     const struct mylist_random *p = list_entry(v, struct mylist_random, list);
 36
 37     seq_printf(m, "%s", p->info);
 38
 39     return 0;
 40 }
 41
 42 static const struct seq_operations seq_test_ops = {
 43     .start  = seq_start,
 44     .next   = seq_next,
 45     .stop   = seq_stop,
 46     .show   = seq_show,
 47 };
 48
 49 static int seq_test_open(struct inode *inode, struct file *file)
 50 {
 51     return seq_open(file, &seq_test_ops);
 52 }
 53
 54 static const struct file_operations seq_test_fops = {
 55     .owner        = THIS_MODULE,
 56     .open        = seq_test_open,
 57     .read        = seq_read,
 58     .llseek        = seq_lseek,
 59     .release    = seq_release,
 60 };
 61
 62 static int __init seq_test_init(void)
 63 {
 64     int i, count;
 65     struct mylist_random *mylist_node;
 66     struct proc_dir_entry *p;
 67
 68     p = proc_create("seq_file_test", S_IRUGO, NULL, &seq_test_fops);
 69     if (!p)
 70     goto out;
 71
 72     for(i = 0; i < 10; i++) {
 73     mylist_node = kmalloc(sizeof(struct mylist_random), GFP_ATOMIC);
 74     if (!mylist_node)
 75         return -ENOMEM;
 76     memset(mylist_node, 0, sizeof(struct mylist_random));
 77     get_random_bytes(&count, sizeof(int));
 78     sprintf(mylist_node->info, "random number %d: %d\n", i, count);
 79     printk("%s", mylist_node->info);
 80     list_add_tail(&mylist_node->list, &test_list);
 81     }
 82
 83     return 0;
 84 out:
 85     remove_proc_entry("seq_file_test", NULL);
 86     return -EFAULT;
 87 }
 88
 89 static void __exit seq_test_exit(void)
 90 {
 91     struct list_head *p, *q;
 92     struct mylist_random *mylist_node;
 93
 94     list_for_each_safe(p, q, &test_list) {
 95     mylist_node = list_entry(p, struct mylist_random, list);
 96     list_del(p);
 97     kfree(mylist_node);
 98     }
 99
100     remove_proc_entry("seq_file_test", NULL);
101 }
102
103 module_init(seq_test_init);
104 module_exit(seq_test_exit);
105
106 MODULE_AUTHOR("Richard Tang <[email protected]>");
107 MODULE_LICENSE("GPL");

http://blog.csdn.net/npy_lp/article/details/7219776

时间: 2024-10-14 15:09:43

proc文件系统的相关文章

shell学习五十八天----/proc文件系统

/proc文件系统 前言:linux中的/proc文件系统,由一组目录和文件组成,挂载(mount)与/proc目录下. /proc文件系统是一种虚拟文件系统,以文件系统目录和文件形式,提供一个指向内核数据结构的接口.这为查看和改变各种系统属性开启了方便之门.此外,还能通过一组以/proc/PID形式命名的目录(PID是进程的ID)查看系统汇总运行各进程的相关信息. 通常,/proc目录下的文件内容都采取可读的文本形式,shell脚本也能对其进行解析.程序可以打开,读取和写入/proc目录下的既

使用 /proc 文件系统来访问 linux操作系统 内核的内容 &amp;&amp; 虚拟文件系统vfs及proc详解

http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/20130422/366044.html 使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口 简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信.在 /proc 文件系统中,

Linux的proc文件系统

proc为一个内核数据结构接口,用户空间和内核空间可以通过该接口通信, 与普通文件不同的是,这些虚拟文件的内容都是动态创建的. proc文件系统是一个伪文件系统,它只存在内存当中,而不占用外存空间. 它以文件系统的方式为访问系统内核数据的操作提供接口.用户和应用程序 可以通过 proc得到系统的信息,并可以改变内核的某些参数. proc 文件系统可以被用于收集有用的关于系统和运行中的内核的信息. 对此文件系统的访问同一般文件相同. 例: 1.统计cpu个数: cat /proc/cpuinfo

用户空间和内核空间通讯之【proc文件系统】

今天我们介绍另一种用户内核空间通信的方法:proc文件系统. proc文件系统作为linux提供的一种虚拟文件系统并不占用实际外围存储空间,它仅存在于内存中,系统断电即消失.proc文件系统最开始的设计主要是为满足内核向用户态进程报告其状态而设计,并没有为输入做规定和说明.随着发展,现在的proc文件系统已经演变成一个"用户-内核"空间半双工的通信方式了(虽然目前已经开始有点混乱了,但某些早期开发的软件代码中还在继续使用这个文件系统).用户不但可以从proc文件系统中读取内核的相关状态

深入理解linux系统下proc文件系统内容

http://www.itshanghai.net/technology/2009/0209/article_238.html 另外,可以参考这个http://www.centos.org/docs/5/html/5.1/Deployment_Guide/ch-proc.html 内容摘要:Linux系统上的/proc目录是一种文件系统,即proc文件系统. Linux系统上的/proc目录是一种文件系统,即proc文件系统.与其它常见的文件系统不同的是,/proc是一种伪文件系统(也即虚拟文件

在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world

一.题目 编写一个内核模块,在/proc文件系统中增加一个目录hello,并在这个目录中增加一个文件world,文件的内容为hello world.内核版本要求2.6.18 ? 二.实验环境 物理主机:win7 64bit, i5双核,8G内存 虚拟机:Vmware Workstation 10.0.2 虚拟主机: CentOs-5.11,内核2.6.18 ? 三.实验思路 在着手解决问题之前,我在网上查阅了一些资料,大多是关于模块的介绍.linux内核采用的是模块化编程,这样可以很容易的添加或

kobox: key_proc.c -v1 如何使用proc文件系统调试驱动

使用proc文件系统可以很方便调试驱动,查看驱动中的一些数据 平台:TQ2440 系统版本: [email protected]:/mnt/shared/kobox# uname -a Linux ubuntu 3.11.0-12-generic #19-Ubuntu SMP Wed Oct 9 16:12:00 UTC 2013 i686 i686 i686 GNU/Linux 其实在3.x中创建proc文件系统和在2.x中创建是有所区别的,这里需要注意下,在2.6.x中创建起来更加方便 这里

linux中proc文件系统 -- ldd3读书笔记

1./proc 文件系统概述 /proc 文件系统是由软件创建,被内核用来向外界报告信息的一个文件系统./proc 下面的每一个文件都和一个内核函数相关联,当文件的被读取时,与之对应的内核函数用于产生文件的内容.我们已经见到了很多这样的文件,例如,/proc/modules 总是返回当前内核中加载的模块. /proc 广泛的应用在 linux 文件系统中,现代 linux 发行版上的许多应用程序,例如 ps ,top 和 uptime 都从 /proc 获取他们所需要的信息.一些驱动程序也通过

linux kernel (proc文件系统)参数

http://blog.csdn.net/guowake/article/details/3279796 Linux Proc文件系统,通过对Proc文件系统进行调整,达到性能优化的目的. 二./proc/sys/kernel/优化1)     /proc/sys/kernel/ctrl-alt-del该文件有一个二进制值,该值控制系统在接收到ctrl+alt+delete按键组合时如何反应.这两个值分别是:零(0)值,表示捕获ctrl+alt+delete,并将其送至 init 程序:这将允许

使用 /proc 文件系统

在安装新硬件到 Linux 系统之前,你会想要知道当前系统的资源配置状况. Linux 将这类信息全集中在 /proc 文件系统下./proc 目录下的文件都是 Linux 内核虚拟出来的,当你读取它们是,内核会实时提供文件内容.借由/proc,我们可得知系统的运作状态.例如,从 /proc/interrupt./proc/dma./proc/ioports./proc/pci 这几个文件,可分别查出系统的中断请求(IRQ).DMA信道.I/O端口使用状况.PCI 总线的状态.