Chinaunix首页 | 论坛 | 博客
  • 博客访问: 9465083
  • 博文数量: 1750
  • 博客积分: 12961
  • 博客等级: 上将
  • 技术积分: 20091
  • 用 户 组: 普通用户
  • 注册时间: 2009-01-09 11:25
个人简介

偷得浮生半桶水(半日闲), 好记性不如抄下来(烂笔头). 信息爆炸的时代, 学习是一项持续的工作.

文章分类

全部博文(1750)

文章存档

2024年(26)

2023年(26)

2022年(112)

2021年(217)

2020年(157)

2019年(192)

2018年(81)

2017年(78)

2016年(70)

2015年(52)

2014年(40)

2013年(51)

2012年(85)

2011年(45)

2010年(231)

2009年(287)

分类: LINUX

2010-11-23 14:23:16

  • llseek 方法实现了 lseek 和 llseek 系统调用.
  • 如果驱动中没有设置 llseek方法, 那么内核缺省的移位是通过filp->f_pos 即文件的当前读写位置实现的。
  • 范例

loff_t scull_llseek(struct file *filp, loff_t off, int whence)

{

    struct scull_dev *dev = filp->private_data;

    loff_t newpos;


    switch (whence)

    {

    case 0: /*SEEK_SET*/

           newpos = off; break;

    case 1: /*SEEK_CUR*/

           newpos = filep->f_pos + off; break;

    case 2: /*SEEK_END*/

           newpos = dev->size + off; break;

    default: /*error*/

           return -EINVAL;          

    }

    if (newpos < 0)  return -EINVAL;

    filp->f_pos = newpos;

    return newpos;

}


/* 驱动的read/write方法也要根据filp->f_pos 来协作 */



默认情况下, 驱动时允许seek操作的, 如果确认设备不需要seek操作,应当在驱动的open方法中使用
int nonseekable_open(struct inode *node; struct file *filp); 方法来通知内核此设备时没有支持seek操作的。 或者把file_operations结构中的llseek方法设置成 no_llseek. 这样用户程序就不能使用类seek(包括pread / pwrite)的调用。

阅读(1886) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~