网站大量收购独家精品文档,联系QQ:2885784924

6.6. 在一个设备文件上的存取控制.pdf

  1. 1、本文档共7页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
6.6. 在一个设备文件上的存取控制

6.6. 在⼀个设备⽂件上的存取控制 6.6. 在⼀个设备⽂件上的存取控制 提供存取控制对于⼀个设备节点来说有时是⾄关重要的. 不仅是⾮授权⽤户不 使⽤ 设备( 由⽂件系统许可位所强加的限制), ⽽且有时只有授权⽤户才应当被允许来打开设 备⼀次. 这个问题类似于使⽤ ttys 的问题. 在那个情况下, login 进程改变设备节点的所有权, ⽆ 论何时⼀个⽤户登录到系统, 为了阻⽌其他的⽤户打扰或者偷听这个 tty 的数据流. 但 是, 仅仅为了保证对它的唯⼀读写⽽使⽤⼀个特权程序在每次打开它时改变⼀个设备 的拥有权是不实际的. 迄今所显⽰的代码没有实现任何的存取控制, 除了⽂件系统许可位. 如果系统调⽤ open 将请求递交给驱动, open 就成功了. 我们现在介绍⼏个新技术来实现⼀些额外的检查. 每个在本节中展⽰的设备有和空的 scull 设备有相同的⾏为(即, 它实现⼀个持久的内存 区)但是在存取控制⽅⾯和 scull 不同, 这个实现在 open 和 release 操作中. 6.6.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 informa 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 dev 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 设备同样的设备结构和⽅法, 并且最少的代码复制. 6.6.2. ⼀次对⼀个⽤户限制存取 单打开设备之外的下⼀步是使⼀个⽤户在多个进程中打开⼀个设备, 但是⼀次只允许 ⼀个⽤户打开设备. 这个解决⽅案使得容易测试设备, 因为⽤户⼀次可从⼏个进程读写, 但是假定这个⽤户负责维护在多次存取中的数据完整性. 这通过在 op

文档评论(0)

hhuiws1482 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:5024214302000003

1亿VIP精品文档

相关文档