【发布时间】:2013-01-29 08:54:58
【问题描述】:
我通过 echo 将 h 写入驱动程序: echo -n h /dev/mydriver
当我执行 cat /dev/mydriver 时,myread 函数会连续打印 h。我想打印一次。如何做到这一点。
static char m;
static ssize_t myread(struct file *f, char __user *buf, size_t len, loff_t *off)
{
printk(KERN_INFO "Read()\n");
if (copy_to_user(buf, &m, 1) != 0)
return -EFAULT;
else
return 1;
}
static ssize_t my_write(struct file *f, const char __user *buf, size_t len, loff_t *off)
{
printk(KERN_INFO "Write()\n");
if (copy_from_user(&c, buf + len – 1, 1) != 0)
return -EFAULT;
else
return len;
}
【问题讨论】:
-
因为你没有任何“文件结束”的条件。
-
好的。我不知道在哪里放置条件。请你指导我。
-
@JoachimPileborg 你在说 cat 的行为吗?如果没有找到 EOF,它会重新读取文件吗?
-
@Sibrajas
cat程序读取它的输入,直到它到达文件结尾。而且由于 OPs 设备从不这样做,cat将永远持续下去。此外,cat不会“重读”任何内容,OP 设备只是一遍又一遍地“读取”相同的字符。 -
@JoachimPileborg 我不明白这部分。 “一遍又一遍地“读取”同一个字符。”但 myread 只执行一次 copy_to_user 。抱歉,这是一个非常基本的问题。
标签: c linux linux-kernel linux-device-driver