我制作了一个简单的角色设备,并创建了一个与之通信的节点。当我cat /dev/mychrdev
时,用户空间一遍又一遍地调用我的角色设备的读取功能。相关代码是:
static ssize_t useless_read(struct file *filp, char __user *buff, size_t count, loff_t *offp) {
int ret, read_count;
read_count = sprintf(message, "Major number: %d\n", MAJOR(useless_chr_dev->cdev_num));
ret = copy_to_user(buff, message, read_count);
if (ret == 0) {
printk(KERN_INFO "userspace read success");
return read_count;
} else
return -EFAULT;
}
在我从终端发起读取后,dmesg充满了:
[ 8966.299554] userspace read success
和猫正在发出很多
Major number: 242
Major number: 242
Major number: 242
Major number: 242
为什么不停止?
答案 0 :(得分:1)
cat
不是要一次调用你的读函数。 cat
将继续调用read函数,除非你返回0(即不再需要读取的字节数)。