如何在内核C程序和用户级C程序之间共享数据?

ddd*_*ddd 4 c kernel linux-kernel

我正在使用内核2.8.32的Ubuntu 9.04.我创建了一个简单的系统调用来计算克隆execve调用的数量.当用户/ shell调用此系统调用时,我希望它将这两个值传递给用户.截至目前我正在使用:

#include <linux/sched.h>
#include <linux/asmlinkage>

/* These two variables are extern longs which are defined in sched.h and initialized in process_32.c */

total_execve;
total_clones;

long mycall* (int i){
    int array[2];
    array[0] = total_execve;
    array[1] = total_clones;
    return array;
}
Run Code Online (Sandbox Code Playgroud)

因为我得到一个未定义的引用,我无法编译它.

关于返回数组:我的新调用是否能够访问数组,数组不会位于内核内存中吗?

nmi*_*els 5

不要将指针返回到堆栈中.让调用者将指针传递给函数.此外,您的函数声明语法不正确.这是你想要做的:

void mycall (int *execve, int *clones)
{
    *execve = total_execve;
    *clones = total_clones;
}
Run Code Online (Sandbox Code Playgroud)