我需要使用 /proc 文件系统编写一个模拟“多播”的内核模块。
基本上它需要支持以下场景:
1) 允许对 /proc 文件进行一次写访问和对 /proc 文件进行多次读访问。
2) 模块应该有最后一次成功写入内容的缓冲区。每次写入都应与所有读取器的读取匹配。
考虑场景 2,作者写了一些东西,有两个读者(A 和 B),A 读取缓冲区的内容,然后 A 尝试再次读取,在这种情况下,它应该进入 wait_queue 并等待下一条消息,它不应该再次获得相同的缓冲区。
我需要保留所有已经读取当前缓冲区的 pid 的映射,以防他们再次尝试读取并且缓冲区没有更改,它们应该被阻止,直到有一个新的缓冲区。我试图弄清楚有一种方法可以在没有地图的情况下保存该信息。我听说 I/O 系统中有一些冗余字段,如果它已经读取了当前缓冲区,我可以使用它们来标记进程。
有人可以给我一个提示,我应该在哪里寻找那个领域?如何在不保留 pid 和缓冲区的“地图”的情况下保存当前进程的信息?
谢谢!