繁体   English   中英

在我的读取功能myread中,当我执行cat / driver / mydriver时,它会连续打印读取的数据。 我只需要打印一次该怎么做

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM