zoukankan      html  css  js  c++  java
  • linux单 open 设备

    提供存取控制的强力方式是只允许一个设备一次被一个进程打开(单次打开). 这个技术最 好是避免因为它限制了用户的灵活性. 一个用户可能想运行不同的进程在一个设备上, 一 个读状态信息而另一个写数据. 在某些情况下, 用户通过一个外壳脚本运行几个简单的程 序可做很多事情, 只要它们可并发存取设备. 换句话说, 实现一个单 open 行为实际是在 创建策略, 这样可能会介入你的用户要做的范围.

    只允许单个进程打开设备有不期望的特性, 但是它也是一个设备驱动最简单实现的存取控 制, 因此它在这里被展示. 这个源码是从一个称为 scullsingle 的设备中提取的.

    scullsingle 设备维护一个 atiomic_t 变量, 称为 scull_s_available; 这个变量被初 始化为值 1, 表示设备确实可用. open 调用递减并测试 scull_s_available 并拒绝存取 如果其他人已经使设备打开.

    static atomic_t scull_s_available = ATOMIC_INIT(1);

    static int scull_s_open(struct inode *inode, struct file *filp)

    {

    struct scull_dev *dev = &scull_s_device; /* device information */ if (! atomic_dec_and_test (&scull_s_available))

    {

    atomic_inc(&scull_s_available); return -EBUSY; /* already open */

    }

    /* then, everything else is copied from the bare scull device */ if ( (filp->f_flags & O_ACCMODE) == O_WRONLY)

    scull_trim(dev); filp->private_data = dev; return 0; /* success */

    }

    release 调用, 另一方面, 标识设备为不再忙:

    static int scull_s_release(struct inode *inode, struct file *filp)

    {

    atomic_inc(&scull_s_available); /* release the device */ return 0;

    }

    正常地, 我们建议你将 open 标志 scul_s_available 放在设备结构中( scull_dev 这 里), 因为, 从概念上, 它属于这个设备. scull 驱动, 但是, 使用独立的变量来保持这 个标志, 因此它可使用和空 scull 设备同样的设备结构和方法, 并且最少的代码复制.

  • 相关阅读:
    Java 类加载、调用构造器、执行方法的过程
    flink定义各类source
    flink个人基础笔记
    flink任务提交流程
    Flink 命令
    Flink开发环境搭建(idea2019)
    Flink集群部署
    canal开启状态,但是不能生产数据到kafka,问题解决
    Cannal单节点部署
    kafka单节点部署
  • 原文地址:https://www.cnblogs.com/fanweisheng/p/11141902.html
Copyright © 2011-2022 走看看