“参数loff_t”是一个“长偏移量”,即寻求立场相结合的疯狂多样性
off_t,
off64_t等,使驾驶者可以只使用参数loff_t,而不是担心。
当您进入驱动程序时,指针本身指向用户提供的偏移量(假设它是用户代码来执行驱动程序访问,从技术上讲内核可以提供自己的偏移量,但是用户的情况就是要考虑的情况)通过
lseek,
llseek或
lseek64等等,然后通过普通的读写操作。考虑一下常规磁盘文件的情况:当您首次创建
open文件时,您(作为用户)将获得内核以提供一个数据结构,该数据结构可跟踪您在文件中的当前位置,因此,如果您
read或
write某些字节,下一个
read或
write从您上次停站的地方接站。
此外,如果你
dup文件描述符,或做通过(例如)的等效
fork和
exec运行命令的序列而言,该寻找位置由所有继承进程共享。因此,在shell提示符下,命令:
(prog1; prog2; prog3) > outputfile
创建一个输出文件,然后
dup将描述符传递给这三个程序,以便
prog2写入的输出在的输出之后立即进入该文件
prog1,而输出的结果
prog3紧随其他两个之后—都是因为所有三个单独的进程共享相同的基础内核数据结构具有相同的内部
loff_t。
这同样适用于设备驱动程序文件。调用读取和写入函数时,您会收到用户提供的“当前偏移量”,并且可以(并且应该)根据需要对其进行更新…假设有任何需要(例如,您想为用户提供常规文件的外观,包括在读取和写入时偏移量会移动的事实)。如果设备在逻辑上应用了查找偏移,则可以在此处使用它。
当然,设备驱动程序还有很多,这就是为什么在此书(qv)上有整本书的章节。:-)



