【问题标题】:Saving information in the IO System在 IO 系统中保存信息
【发布时间】:2010-05-19 09:59:07
【问题描述】:

我需要使用 /proc 文件系统编写一个模拟“多播”的内核模块。

基本上需要支持以下场景:

1) 允许对 /proc 文件进行一次写访问和对 /proc 文件进行多次读访问。

2) 模块应该有一个缓冲区,内容是上次成功写入的内容。 每次写入都应与所有读取器的读取匹配。

考虑场景 2,一个 writer 写了一些东西,有两个 reader(A 和 B),A 读取缓冲区的内容,然后 A 尝试再次读取,在这种情况下它应该进入 wait_queue 并等待下一条消息,它应该再次获得相同的缓冲区。

我需要保留所有已经读取当前缓冲区的 pid 的映射,以防他们再次尝试读取并且缓冲区没有更改,它们应该被阻止,直到有一个新的缓冲区。我试图弄清楚有一种方法可以在没有地图的情况下保存该信息。 我听说 I/O 系统中有一些冗余字段,如果它已经读取了当前缓冲区,我可以使用它们来标记进程。

谁能给我一个提示,我应该在哪里寻找那个领域?如何在不保留 pid 和缓冲区的“地图”的情况下保存当前进程的信息?

谢谢!

【问题讨论】:

    标签: linux-kernel kernel kernel-module


    【解决方案1】:

    不要尝试根据 PID 保留它 - 这只是错误的抽象级别。

    每次打开文件时,都会创建一个新的struct file,它引用打开文件的那个实例。将信息(给定struct file 读取的最新缓冲区)存储在struct file 本身内。

    您可以使用struct file 中的private_data 指针来存储您需要的信息。这就是它的用途。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-19
      • 2016-03-15
      • 2012-06-01
      • 2017-06-19
      相关资源
      最近更新 更多