我正在使用内核为 2.8.32 的 Ubuntu 9.04。我创建了一个简单的系统调用来计算 cloneexecve 调用的数量。当用户/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;
}

我无法编译它,因为我得到了一个 undefined reference 。

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

最佳答案

首先回答你的最后一个问题:数组确实在“内核”内存中,但它是堆栈分配的,这意味着当 mycall() 函数退出时它会“消失”。您的函数可能看起来有效,但在内存被快速重用的情况下可能会失败。

要返回多个值,常见的模式是调用者传递指向用户空间内存的指针,并让内核例程填充它们。例如,您可以为两个值传递两个指针,或者定义一个包含您需要的值并由内核例程填充的结构。

关于c - 如何在内核 C 程序和用户级 C 程序之间共享数据?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4974099/

10-11 23:20
查看更多