我正在Linux内核中实现一个简单的IPC系统。简单来说,假设我们只有2个系统调用。并且不能更改界面 。
SYSCALL_DEFINE1(add, int, id)
SYSCALL_DEFINE1(del, int, id)
如果add
有一个包含id
的现有元素,那么它需要报告“已经存在” EEXIST
。
所以我认为它需要将添加的数据存储在某个地方。我的选择是将其作为全局值存储在我的syscall实现.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
的生存期等于用户空间程序?