linux单 open 设备

linux单 open 设备,第1张

概述提供存取控制的强力方式是只允许一个设备一次被一个进程打开(单次打开). 这个技术最 好是避免因为它限制了用户的灵活性. 一个用户可能想运行不同的进程在一个设备上, 一 个读状态信息而另一个写数据. 在某些情况下, 用户通过一个外壳脚本运行几个简单的程 序可做很多事情, 只要它们可并发存取设备. 换句话说, 实现一个单 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 设备同样的设备结构和方法,并且最少的代码复制.

总结

以上是内存溢出为你收集整理的linux单 open 设备全部内容,希望文章能够帮你解决linux单 open 设备所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1019076.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-23
下一篇 2022-05-23

发表评论

登录后才能评论

评论列表(0条)

保存