Chinaunix首页 | 论坛 | 博客
  • 博客访问: 113293
  • 博文数量: 23
  • 博客积分: 471
  • 博客等级: 一等列兵
  • 技术积分: 251
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-21 15:21
文章分类
文章存档

2017年(1)

2013年(2)

2011年(20)

分类: LINUX

2011-08-23 14:51:27

 
5.llseeek实现
  
   llseek方法对应lseek和llseek系统调用,该方法通过直接修改filp->f_pos执行定位操作,filp->f_pos记录的文件的读写位置,为了让lseek系统调用正确工作,read/write方法必须通过更新它们收到的偏移量参数来配合。在scull设备中的该方法实现如下:
  1. /*
  2.  * The "extended" operations -- only seek
  3.  */

  4. loff_t scull_llseek(struct file *filp, loff_t off, int whence)
  5. {
  6.         struct scull_dev *dev = filp->private_data;
  7.         loff_t newpos;

  8.         switch(whence) {
  9.           case 0: /* SEEK_SET */
  10.                 newpos = off;
  11.                 break;

  12.           case 1: /* SEEK_CUR */
  13.                 newpos = filp->f_pos + off;
  14.                 break;

  15.           case 2: /* SEEK_END */
  16.                 newpos = dev->size + off;
  17.                 break;

  18.           default: /* can't happen */
  19.                 return -EINVAL;
  20.         }
  21.         if (newpos < 0) return -EINVAL;
  22.         filp->f_pos = newpos;
  23.         return newpos;
  24. }

 

6.设备文件访问控制
 
   提供设备文件的控制访问有时候是很重要的,书中提到了几种有关设备控制访问的方法,下面简单介绍下:
   1.独享设备:一次只允许一个进程打开设备。
   2.限制每次只由一个用户访问:允许单个用户在多个进程中打开设备。
   3.阻塞型open操作:如果打开文件失败,阻塞该进程知道满足条件。
   4.打开时复制设备:在进程打开文件时创建设备的不同私有副本,这种方法只有在设备没有绑定到某个硬件对象时才能实现。
阅读(2370) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~