gpt4 book ai didi

c - 在我的读取函数 myread 中,当我执行 cat/driver/mydriver 时,它会不断打印读取的数据。我只需要打印一次如何做到这一点

转载 作者:太空狗 更新时间:2023-10-29 11:33:29 25 4
gpt4 key购买 nike

我通过回显将 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;
}

最佳答案

如果您想将标准工具(例如 cat)与您的自定义驱动程序一起使用,请不要忘记正确设置偏移量 (*loff_t off)。您的read 函数应如下所示:

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;
}

关于c - 在我的读取函数 myread 中,当我执行 cat/driver/mydriver 时,它会不断打印读取的数据。我只需要打印一次如何做到这一点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14578949/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com