Linux角色设备:用户空间(cat)不会停止阅读

时间:2018-05-31 06:18:43

标签: linux-kernel

我制作了一个简单的角色设备,并创建了一个与之通信的节点。当我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

为什么不停止?

1 个答案:

答案 0 :(得分:1)

cat不是要一次调用你的读函数。 cat将继续调用read函数,除非你返回0(即不再需要读取的字节数)。