4

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

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

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

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

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

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

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

谢谢!

4

1 回答 1

1

不要尝试基于 PID 来保留它——这只是错误的抽象级别。

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

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

于 2010-05-19T01:59:07.273 回答