c - 如何在内核模块中创建每个进程的变量?
问题描述
设想
我正在linux内核中实现一个简单的IPC系统。简单来说,假设我们只有 2 个系统调用。并且界面无法更改。
SYSCALL_DEFINE1(add, int, id)
SYSCALL_DEFINE1(del, int, id)
如果add
有一个现有的元素id
,那么它需要报告“已经存在”,EEXIST
。
所以我认为它需要将添加的数据存储在某个地方。我的选择是将它.c
作为全局值存储在我的系统调用实现文件中。喜欢:
struct mylist {
int id;
struct list_head list;
};
LIST_HEAD(id_list);
SYSCALL_DEFINE1(add, int, id) {
// kmalloc struct mylist
// operate on `id_list` (add, check existence)
}
问题
当我编写一个用户空间程序进行测试时。
- 我第一次运行测试没问题。
- 第二次失败,因为它报告
id already exists
!
记忆并没有像我想象的那样出现。
问题
- 内核空间数据的生命周期是
id_list
多少?(只要系统启动?) - 我怎样才能使
id_list
' 的生命周期等于用户空间程序?
解决方案
推荐阅读
- c# - 获取窗口矩形 - 所有 0,0,0,0 和多个非 0,0,0,0
- dictionary - 从字典创建计数器
- typescript - Axios 不返回任何内容
- javascript - 重构 if else 语句
- php - 如何在 symfony 5 中验证一些自定义约束
- php - 为什么 Php FFmpeg exec() 进程停止我的网络应用程序?
- matlab - GNU Octave Matlab:绘制刻度标记
- timeout - 如何调用远程kie服务器
- sql - 在 Visual Studio 中构建 SSIS 包
- c# - 使用 C# 在 SQL Server 中搜索。有很多文本框和很多概率