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

我通过echo echo -nh / dev / mydriver将h写入驱动程序

当我做猫/ 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; } 

Solutions Collecting From Web of "在我的读函数myread中,当我执行cat / driver / mydriver时,它不断地读取读取的数据。 我只需要打印一次如何做到这一点"

如果您想在自定义驱动程序中使用标准工具(如 ),请不要忘记正确设置偏移量(* 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函数返回零。