static ssize_t my_read(struct file *f, char __user *buf, size_t
len, loff_t *off)
{
static int first=1;
printk(KERN_INFO "Driver: read()\n");
printk(KERN_INFO "Value of loff_t %ld",*off);
printk(KERN_INFO "Inside value of stringlength is %d",strlen(buffer));
if (copy_to_user(buf,buffer, 1) != 0)
return -EFAULT;
else
{
if(first<=strlen(buffer))
{
first=first+1;
printk(KERN_INFO "INside value of first is %d",first);
printk(KERN_INFO "Inside value of stringlength is %d",strlen(buffer));
return 1;
}
else
return 0;
}
}
static ssize_t my_write(struct file *f, const char __user *buf,
size_t len, loff_t *off)
{
printk(KERN_INFO "Driver: write()\n");
if (copy_from_user(buffer, buf+len-1, 1) != 0)
return -EFAULT;
else
return len;
}
但是第一次我也呼應-n「你好」和cat /dev/mynull
,只會打印o
和釋放裝置對於一些reason.Subsequent cat /dev/mynull
回報什麼。 strlen(buffer)
的值爲1.
這是怎麼回事?預期的結果是,你好應該打印和strlen()
應該返回5
。爲什麼我的設備驅動程序不打印什麼,我輸入
你應該真的改善你的代碼格式。這很難閱讀。我的編輯重點是重新編輯。 – rekire
您是否看到其他印刷品,這只是錯誤的長度?還有,這裏有多少塊代碼?它應該只是一個,因爲你的大括號不排隊...... – Mike
我想現在塊的排隊。按照@rodrigo的建議將值更改爲len後,我得到了五次打印,而不是打印出來的你好。 – user1667307