我試圖在/proc
中創建一個條目,以便我可以控制我的內核模塊。我想我得到了write
部分,但我無法弄清楚read
部分應該如何工作。從LKM創建/ proc中的條目
static char proc_data[1];
static ssize_t read_proc(struct file *file, char __user *buf, size_t count, loff_t *pos){
int ret;
if(pos > 0){
ret = 0;
}else{
memcpy(buf, proc_data, 1);
ret = 1;
}
return ret;
}
static ssize_t write_proc(struct file *file, const char __user *buf, size_t count, loff_t *pos){
if(count > 2)
return -EINVAL;
if(copy_from_user(proc_data, buf, 1))
return -EFAULT;
if(strcmp("1", proc_data) == 0){
//Do something
}else if(strcmp("0", proc_data) == 0){
//Undo something
}
return count;
}
如果我回到1從read_proc
,如果我的貓我的/proc
項,它不會停止輸出相同的值。如果我返回0,它不會輸出任何東西。所以我猜我應該第一次返回1,然後返回0,但我不知道如何。
也許你應該打印你從第一次和後續調用中收到的參數...也許具體是偏移參數。他們不是0 /非零,因爲你的代碼似乎已經解決了? – mah
@mah我想到了這一點,但我看不到它們之間的任何關係,因爲count是65535並且是空的。 – alexandernst
我希望在所有情況下(無論調用者要求什麼)在塊效率上都會得到相同的大小計數,並且隨着每次後續調用都會從同一個開放位置增加到該計數大小。請記住,內核調用非常昂貴,因此係統希望將其最小化,並將通過大型緩衝區來實現,從而最大限度地減少要調用的調用數量。 – mah