私は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");
/proc/proc_test/
using cat
orから読み取るtail
と、カウンターが1ではなく3ずつ増加するという問題に直面しています。
出力:
cat /proc/proc_test
counter = 0
cat /proc/proc_test
counter = 3
cat /proc/proc_test
counter = 6
私は何が間違っているのですか?