LDD3源码分析之llseek分析
LDD3源码分析之llseek分析 编译环境: Ubuntu 10.10 内核版本: 2.6.32-38-generic-pae LDD3 源码路径: examples/scull/main.c 本文分析LDD3第6章的llseek函数。 一、用户空间的lseek函数 要理解驱动中llseek函数的实现,必须先清楚对应的用户空间中lseek函数的用法,lseek函数函数原型如下: [cpp] view plain copy off_t lseek( int fd, off_t offset, int whence); 第一个参数fd是要操作的文件描述符。 第二个参数指定文件操作指针的偏移量。注意,文件的读和写使用的是同一个文件操作指针。 第三个参数指定移动文件操作指针的参考点。这个参数通常取值为以下宏: SEEK_SET:表示相对文件起始位置。 SEEK_CUR:表示相对文件操作指针当前位置。 SEEK_END:表示相对文件结束位置。 下面先来看一个用户空间测试程序llseek_test.c的实现,这个程序用来测试scull的定位功能,其代码如下: [cpp] view plain copy 1#include <stdio.h> 2#include <unistd.h> 3#include <fcntl.h> 4#include <string.h> 5#include <sys