gpt4 book ai didi

c - Linux:系统调用函数的警告隐式声明

转载 作者:行者123 更新时间:2023-12-03 09:58:34 30 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Linux system calls vs C lib functions

(4 个回答)


去年关闭。




因此,我正在编写一个新的系统调用并将其添加到 Linux 内核中,当我通过系统调用号显式调用它时,该内核会起作用:syscall(335, pid);但是给出了一个警告:使用其通用名称时系统调用函数的隐式声明:s_call(pid) .我不明白为什么它没有找到它。

-test 文件已经在内核中
-系统调用已经在sys.c中定义SYSCALL_DEFINE1(s_call, int, who)- 在 syscalls.h 中有一个 asmlinkage asmlinkage long sys_s_call(int pid);- 在 syscall_64.tbl 中作为

335 64  s_call      __x64_sys_s_call

- 测试文件中使用的 header :
#include <stdio.h>
#include <unistd.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

最佳答案

那是因为您需要为程序中的系统调用编写一个包装器。当您编写系统调用时,包装函数不仅会神奇地出现在用户空间中:

long s_call(int pid)
{
return syscall(335, pid);
}

如果您有一个带有系统调用编号的头文件,则不必使用魔数(Magic Number):
long s_call(int pid)
{
return syscall(__NR_s_call, pid);
}

此外,您应该使用 pid_t而不是 int .

关于c - Linux:系统调用函数的警告隐式声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60470079/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com