Mmap:跟踪访问的区域

时间:2014-06-16 08:05:52

标签: c linux mmap

上下文:

处理文本文件。 Linux,debian 64bits。 C99-C11

需要:

跟踪该文件的已打开索引。 例如:

我打开索引65,然后是235,然后是12,然后是1024来读取该字母。 我希望能够像[12,65,235,1024]那样跟踪那些指数。

我读内核保留了一个结构,但是......

代码中缺少malloc数组以保持跟踪是一种约束。

为什么?看它是多么可能/不切实际。

系统(很明显?)已经为我保留了一条轨道,对吗?

问题:

内核是否可以帮助我跟踪mmap文件的打开索引(如果可能的话,还有排序)以避免代码中出现malloc&f; d?索引?

编辑:

它不是索引文件。它是一个基本的文本文件,里面有一些文本。我想跟踪访问的字节,如果内核已经知道哪些字节已被加载/访问,我不想使用它。

1 个答案:

答案 0 :(得分:0)

在讨论“跟踪”任何事情时,重要的问题是“什么是主键?”/“你打算如何访问它?”。

内核只需知道“地址A有文件X的映射,偏移Y,长度Z”。在知道文件X的映射位置时,无需浪费资源。很可能内核知道文件被映射到任何地方的唯一方法是有人使用该文件的引用计数,它甚至可能不知道那些是mmap:s还是只是打开文件描述符。

实际上,当一个文件被强制无效时(比如在卸载时),只需用无效的文件对象替换文件对象而不是跟踪映射并销毁它们(这是Linux中10年的信息,从那以后它可能已经改变了,我只知道其他操作系统仍然可以这样工作。)

所以回答你的问题:内核可能并不关心你需要知道什么。你需要自己做。特别是如果你想要便携的话。