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;
}
ただし、初めてecho -n "HEllo" andを実行するとcat /dev/mynull
、印刷のみo
が行われ、何らかの理由でデバイスが解放されます。その後cat /dev/mynull
は何も返されません。の値strlen(buffer)
は1です。
なぜこれが発生するのですか?期待される結果は、Helloが出力され、strlen()
を返す必要があるということ5
です。