【发布时间】:2012-09-10 14:47:40
【问题描述】:
我正在研究一个linux内核,所以我尝试编写一个简单的模块。
下面的代码应该控制read()对于/proc/proc_test的调用次数:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/proc_fs.h>
#include <linux/kernel.h>
#include <asm/current.h>
static int __init init(void);
static void __exit stop(void);
static int proc_read(char *buffer, char **start, off_t offset, int size, int *eof, void *data);
static int counter = 0;
static int proc_read(char *buffer, char **start, off_t offset, int size, int *eof, void *data) {
if (size < 256) return -ENOMEM;
return sprintf(buffer, "counter = %d\n", counter++); <-- supposed to be incremented once
}
static int __init init() {
if (create_proc_read_entry("proc_test", 0, NULL, proc_read, NULL) == 0) {
printk(KERN_ERR "Can not creat entry\n");
return -ENOMEM;
}
printk("Entry created!\n");
return 0;
}
static void __exit stop() {
remove_proc_entry("proc_test", NULL);
printk("Entry removed!\n");
return;
}
module_init(init);
module_exit(stop);
MODULE_LICENSE("GPL");
我面临的问题是,当我使用cat 或tail 从/proc/proc_test/ 中读取数据时,计数器会增加 3 而不是 1。
输出:
cat /proc/proc_test
counter = 0
cat /proc/proc_test
counter = 3
cat /proc/proc_test
counter = 6
我做错了什么?
【问题讨论】:
标签: c linux-kernel