filp_open дает указатель файла без указателя операции? - PullRequest
0 голосов
/ 21 мая 2018

Я пытаюсь сделать модуль ядра, он требует, чтобы я открыл файл в пространстве ядра.Я использую filp_open для этой цели, ниже приведен фрагмент кода, который я пытаюсь отладить.

struct file *f =  NULL;
mm_segment_t oldfs;
oldfs = get_fs();
set_fs(get_ds());
f = filp_open("/home/abhijeet/project/in",O_RDONLY,0);
set_fs(oldfs);
if(!f->f_op->read)
      printk(KERN_INFO "File System does not allow reads.\n");

Я получаю «Файловая система не разрешает чтение».Ошибка.Я делаю это внутри виртуальной машины с ядром 4.4.131

1 Ответ

0 голосов
/ 21 мая 2018
  1. почему get_fs / set_fs dance?
  2. почему вы думаете, что вам нужно открыть файл из ядра
  3. вы пропускаете проверку ошибок и устанавливаете файл в NULL длябез причины
  4. если вы проверите, как реализовано чтение, вы обнаружите:

__vfs_read с 4.17rc5 (не иметь под рукой 4.4, но, вероятно, у него будет что-то похожее):

ssize_t __vfs_read(struct file *file, char __user *buf, size_t count,
                   loff_t *pos)
{
        if (file->f_op->read)
                return file->f_op->read(file, buf, count, pos);
        else if (file->f_op->read_iter)
                return new_sync_read(file, buf, count, pos);
        else
                return -EINVAL;
}

Как видите -> чтение не единственный способ чтения из файла.Почему вы проверяли этот указатель?

Чтение файлов из модулей ядра обычно плохая идея.Пожалуйста, объясните, для чего вам это нужно.

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