2015-08-05 4 views
0

Недавно я работаю над образцом кода о связи между модулем драйвера ядра и приложениями пользовательского пространства. У меня есть вопрос о интерфейсе .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.

Большое спасибо!

ответ

1

Эти интерфейсы также используются для функций pread/pwrite, которые используют собственное смещение вместо общего filp->f_pos. Вот почему offp передается интерфейсам явно.

+0

Большое спасибо. Это действительно разъясняет мои сомнения :) – uestclx

 Смежные вопросы

  • Нет связанных вопросов^_^