Недавно я работаю над образцом кода о связи между модулем драйвера ядра и приложениями пользовательского пространства. У меня есть вопрос о интерфейсе .read и .write в файле_operations(). Согласно LDD3:дескриптор файла и смещение loff_t в интерфейсе чтения и записи ioctl
ssize_t read(struct file *filp, char __user *buff, size_t count, loff_t *offp);
ssize_t write(struct file *filp, const char __user *buff,size_t count, loff_t *offp);
Для обоих методов
filp
является указателем файла иcount
является размер передачи запрошенных данных. Аргументbuff
указывает на буфер пользователя , в котором хранятся данные, которые должны быть записаны, или пустой буфер, где должны быть размещены вновь прочитанные данные . Наконец,offp
является указателем на объект «long offset type» , который указывает положение файла, которое пользователь имеет .
Мне интересно, зачем нам параметр loff_t *offp
? Поскольку элемент в дескрипторе файла: filp->f_pos
уже указывает текущую позицию чтения и записи. И согласно моему наблюдению, после возвращения чтения или записи система автоматически выдаст filp->f_pos
значение offp
.
Большое спасибо!
Большое спасибо. Это действительно разъясняет мои сомнения :) – uestclx