gpt4 book ai didi

c - 为什么在 struct file_operation 中没有 munmap 回调?

转载 作者:IT王子 更新时间:2023-10-29 01:14:42 26 4
gpt4 key购买 nike

我正在开发一个 Linux 内核模块,它通过系统调用 mmap 与用户应用程序共享一 block 内存。该模块在 struct file_operations 中定义的 mmap 回调的帮助下正常工作,它会在调用系统调用时通知模块。

但是,当用户应用程序想要通过系统调用 munmap 停止共享时,问题就出现了。在 struct file_operations 中没有 munmap 回调或做类似工作的东西。因此,我必须再做一个ioctl来通知内核模块共享已被撤销,这既不方便又不安全。

在寻找解决方案的过程中,我发现曾经定义了一个 munmap 回调。但是当内核版本大约是 2.4 或之后的一些时候它被删除了。

有人能告诉我为什么 munmap 回调被删除,或者有没有其他方法可以在调用 munmap 系统调用时通知内核模块?

最佳答案

经过一番搜索,我终于找到了答案。

我需要的函数在 vm_operations_struct 中。如果 munmap() 系统调用成功执行,关闭回调将被调用,我可以使用此函数指针通知我的内核模块内存取消映射刚刚发生。

默认关闭操作的覆盖,即关闭函数指针的分配,是在我的内核模块的 mmap 处理程序中完成的,其中提供了一个 vm_area 结构作为参数,你可以做所有你想做的事情

实际上,所有细节都在 Book Linux Device Drivers 3,第 15 章中描述。

感谢大家提供非常有用的建议。

关于c - 为什么在 struct file_operation 中没有 munmap 回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25098592/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com