Символьное устройство Linux: пользовательское пространство (кошка) не перестает читать - PullRequest
0 голосов
/ 31 мая 2018

Я сделал простое символьное устройство и создал узел для связи с ним.Когда я 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 голосов
/ 31 мая 2018

cat - это не вызов функции чтения один раз.cat будет продолжать вызывать функцию чтения, пока вы не вернете 0 (т. Е. Больше не будет байтов для чтения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...