博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
不允许lseek文件 | nonseekable_open()【转】
阅读量:6321 次
发布时间:2019-06-22

本文共 998 字,大约阅读时间需要 3 分钟。

转自:

使用数据区时,可以使用 lseek 来往上往下地定位数据。但像串口或键盘一类设备,使用的是数据流,所以定位这些设备没有意义;在这种情况下,不能简单地不声明 llseek 操作,因为默认方法是允许定位的。

在 open 方法中调用 nonseekable_open() 时,它会通知内核设备不支持 llseek,nonseekable_open() 函数的实现定义在 fs/open.c 中:

  1.  
    /*
  2.  
    * This is used by subsystems that don't want seekable
  3.  
    * file descriptors
  4.  
    */
  5.  
    int nonseekable_open(struct inode *inode, struct file *filp)
  6.  
    {
  7.  
        filp->f_mode &= ~(FMODE_LSEEK | FMODE_PREAD | FMODE_PWRITE);
  8.  
        
    return 0;
  9.  
    }
  10.  
     

当该函数调用后,如果再使用 lseek 操作时,那么内核会进行检查(fs/read_write.c):

  1.  
    loff_t vfs_llseek(struct file *file, loff_t offset, int origin)
  2.  
    {
  3.  
        
    loff_t (*fn)(struct file *, loff_t, int);
  4.  
     
  5.  
     
  6.  
        fn = no_llseek;
  7.  
        
    if (file->f_mode & FMODE_LSEEK) {   //检查是否可以 LSEEK
  8.  
            fn = default_llseek;
  9.  
            
    if (file->f_op && file->f_op->llseek)
  10.  
                fn = file->f_op->llseek;
  11.  
        }
  12.  
        
    return fn(file, offset, origin);
  13.  
    }
  14.  
     

上面,no_llseek() 函数定义为:

  1.  
    loff_t no_llseek(struct file *file, loff_t offset, int origin)
  2.  
    {
  3.  
        
    return -ESPIPE;
  4.  
    }
  5.  
     

为了完整起见,如果不希望设备被 seek,还应该将 file_operations 结构中的 llseek 方法设置为特殊的辅助函数 no_llseek 。

转载于:https://www.cnblogs.com/sky-heaven/p/9760546.html

你可能感兴趣的文章
CentOS7搭建LNMP--编译安装
查看>>
python中yield的用法详解——最简单,最清晰的解释
查看>>
es6声明类实现继承
查看>>
深入nodejs-搭建静态服务器(实现命令行)
查看>>
JS数据结构学习:队列
查看>>
10个最佳ES6特性 ES7与ES8的特性
查看>>
IDEA 插件开发入门教程
查看>>
读《疯狂Java:突破程序员基本功的16课》之数组与内存控制部分总结
查看>>
10 个深恶痛绝的 Java 异常。。
查看>>
CSS粘性定位是怎样工作的
查看>>
986-区间列表的交集
查看>>
Python实现二叉树相关算法
查看>>
使用Quasar设计Material和IOS风格的响应式网站
查看>>
Redux 学习总结 (React)
查看>>
如何将qlv格式视频转换成mp4格式
查看>>
web安全类
查看>>
my vim rc
查看>>
Vue笔记(五)——Token&生命周期
查看>>
Andriod监听支付宝收款实现个人支付宝支付接口!附安卓App
查看>>
LeetCode17.电话号码的字母组合 JavaScript
查看>>