gpt4 book ai didi

c - 如何以编程方式检测 linux 上是否存在系统调用?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:36:54 24 4
gpt4 key购买 nike

我正在尝试编译一个将在某些旧版本内核上运行的 C 程序。我编译程序的内核版本与我的程序将要运行的内核版本不同。如果我只在较新版本的内核上调用系统调用,程序会崩溃还是会返回错误值?

最佳答案

这取决于。直接调用系统调用的情况很少见(syscalls (2) 手册页甚至对此进行了说明);更常见的是使用库包装器,例如 writereadopenclose 等。如果您尝试对相关系统上不存在的系统调用使用包装器函数,则包装器很可能也不存在,在这种情况下,您的程序将无法通过运行时链接器并无法启动.

另一方面,如果您直接通过 syscall 函数调用系统调用(或多或少),例如

syscall(SYS_write, fd, buffer, size);

代替

write(fd, buffer, size);

然后 syscall 将返回 -1 如果您尝试调用不存在的系统调用,并且 errno 将设置为 ENOSYS

如果您使用足够新的 libc 来包含包装函数,而内核太旧以至于不支持相应的系统调用,则包装函数可能会传递此错误。检查相关包装函数的文档。

关于c - 如何以编程方式检测 linux 上是否存在系统调用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27751707/

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