![](/img/trans.png)
[英]in this example how do i print the sequence only once? (recursive function)
[英]In my read function myread it is continuously printing the read data when i do cat /driver/mydriver. I need to print only once how to do that
我通过执行echo将h写入驱动程序:echo -nh / 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;
}
如果要在自定义驱动程序中使用标准工具(例如cat ),请不要忘记正确设置偏移量(* loff_t off )。 您的读取函数应如下所示:
static ssize_t myread(struct file *f, char __user *buf, size_t len, loff_t *off)
{
printk(KERN_INFO "Read()\n");
/* You have just a single char in your buffer, so only 0 offset is valid */
if(*off > 0)
return 0; /* End of file */
if (copy_to_user(buf, &m, 1))
return -EFAULT;
*off++;
return 1;
}
您必须考虑您希望设备如何工作...对设备编写的内容可用于多个进程吗? 还是应该在阅读后删除您写的内容?
后者当然更容易,并且可以通过清除myread
函数中的变量m
来简单地实现。 如果为零,则从myread
函数返回零。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.