Linux kernel 在IO系统中保存信息

Linux kernel 在IO系统中保存信息,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我需要编写一个内核模块,使用/proc文件系统模拟“Multicast” 基本上,它需要支持以下场景: 1) 允许对/proc文件进行一次写访问和多次读访问 2) 模块应具有上次成功写入内容的缓冲区。 每一次写入都应该与所有读卡器的读取相匹配 考虑场景2,一个编写器写了一些东西,有两个读卡器(a和B),a读取缓冲区的内容,然后a尝试再次读取,在这种情况下,它应该进入等待队列并等待下一条消息,而不是再次获得相同的缓冲区 我需要保留一个已经读取当前缓冲区的所有pid的映射,如果它们再次尝试读取并且缓

我需要编写一个内核模块,使用/proc文件系统模拟“Multicast”

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

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

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

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

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

有人能告诉我该在哪里找那个领域吗?如何在不保留pid和缓冲区的“映射”的情况下保存当前流程的信息


谢谢

不要试图将它保持在PID的基础上-那只是错误的抽象级别

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

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