在IO系统中保存信息

时间:2010-05-18 22:14:09

标签: linux-kernel kernel kernel-module

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

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

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

2)模块应该具有上次成功写入内容的缓冲区。 每次写入都应该与所有读者的读数相匹配。

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:1)

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

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

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