gpt4 book ai didi

c - 调用系统调用的不同方式

转载 作者:行者123 更新时间:2023-11-30 17:08:53 25 4
gpt4 key购买 nike

在某些代码中,我可以看到系统调用以一种奇怪的方式调用,以sched_yield为例:

#define __NR_sys_sched_yield    __NR_sched_yield

inline _syscall0(void, sys_sched_yield);

然后我们可以使用sys_sched_yield()。我很好奇直接使用 sched_yield 和这种方式有什么区别。在src/include/asm/unistd中,定义了_syscall0:

#define _syscall0(type,name)  \
type name(void) \
{ \
long __res; \
__asm__ volatile ("int $0x80" \
: "=a" (__res) \
: "0" (__NR_##name)); \
__syscall_return(type,__res); \
}

最佳答案

大概这适用于 sched_yield 可能不可用的系统。至于差异,sched_yield 在出错时返回 -1 并设置 ERRNO,而此实现可能会从内核返回原始值。无法确定,因为您尚未提供 _syscall0 的定义,它必须是宏。

关于c - 调用系统调用的不同方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33483966/

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