read подпрограмма модуля ядра linux называется бесконечным временем [duplicate]

Вы не можете вызвать verify() для объекта, который не является mock. Это вы имели в виду?

Bar collaborator = mock(Bar.class); 
Foo sut = spy(new Foo(collaborator));
verify(collaborator).run(expectedList);
0
задан red0ct 17 June 2016 в 08:23
поделиться

3 ответа

Эта проблема может быть решена путем правильной установки *off (четвертый параметр my_read()).

Вам нужно возвращать счет в первый раз и ноль со второго раза вперед.

if(*off == 0) {
    while (msg[count] != 0) {
        put_user(msg[count], buff++);
        count++;
        (*off)++;
    }
    return count;
}
else
return 0;
1
ответ дан pacholik 15 August 2018 в 22:04
поделиться

Вы не соблюдаете размер буфера, переданный в функцию dev_read, поэтому вы можете вызывать неопределенное поведение в cat. Попробуйте следующее:

static ssize_t dev_read( struct file *filp, char *buff, size_t len, loff_t  *off )
{
    size_t count = 0;
    printk( KERN_ALERT"inside read %d\n", *off );
    while( msg[count] != 0 && count < len )
    {
        put_user( msg[count], buff++ );
        count++;
    }
    return count;
}
1
ответ дан paddy 15 August 2018 в 22:04
поделиться
Функция

.read также должна правильно обрабатывать свои аргументы len и off. Самый простой способ реализовать чтение из файла с буферизацией памяти - использовать хелпер simple_read_from_buffer:

static ssize_t dev_read(struct file *filp, char *buff, size_t len, loff_t *off)
{
    return simple_read_from_buffer(buff, len, off, msg, 100);
}

Вы можете проверить код этого помощника (определенный в fs/libfs.c) для образовательных целей.

BTW, для вашего метода .write вы можете использовать помощник simple_write_to_buffer.

3
ответ дан Tsyvarev 15 August 2018 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: