自定义linux内核系统调用包装函数

时间:2015-03-04 17:02:10

标签: c linux kernel system-calls

我正在为linux内核编写一个自定义系统调用 函数调用一切正常,现在我正在尝试 创建一个包装函数,以便在任何程序中正常使用该函数 不使用系统调用(调用)

到目前为止我所做的是

#include <stdlib.h>
#include<stdio.h>
#include<linux/unistd.h>
#include<errno.h>
#include <sys/types.h>
#include <unistd.h>
#include<string.h>
#include <linux/sched.h>
#include <linux/kernel.h>

long *__wrap_process_info(int myid , void *udata)
{
    return syscall(337 , myid , udata);
}

我的系统调用在错误时返回-1,如果正确执行则返回0 我的问题是,如何使包装函数返回syscall返回值? 并且,我是否需要在包装函数中包含main?

1 个答案:

答案 0 :(得分:0)

假设您使用*作为通配符而不是指针表示法。您的实现已经返回函数syscall返回的值。如果出现错误,它的代码存储在errno变量中,您可能希望将其复制到您将传递给函数的其他参数中:

long <???>__wrap_process_info(int myid , void *udata, long *err )
{
    long result;
    result = syscall(337 , myid , udata);
    *err = errno;
    return result;
}