为什么glibc中宏`-ENOSYS`的意思?
why is the meaning of macro `-ENOSYS` in glibc?
我正在研究pthread_mutex_lock
,发现pthread_mutex_lock
最终会在glibc(version 2.27)中调用一个宏lll_futex_timed_wait()
,我下载了glibc源但是显示lll_futex_timed_wait()
被定义为 -ENOSYS
, 什么意思以及如何得到它的真实定义(应该是系统调用, 我也得到了 linux 内核的源码)?
//glibc-2.27/sysdeps/nptl/lowlevellock-futex.h
/* Wait until a lll_futex_wake call on FUTEXP, or TIMEOUT elapses. */
#define lll_futex_timed_wait(futexp, val, timeout, private) \
-ENOSYS
glibc 的一大块由 sysdeps
子树下的系统和体系结构相关位组成。您看到的是一个通用存根,只有在 glibc 未针对特定平台构建正确配置时才会被编译。
那些较旧的 glibc 版本中低级 futex 细节的实际实现将位于 sysdeps/unix/sysv/linux/lowlevellock-futex.h
有趣的是,在最近的 glibc 版本中,代码被提升为“公共”树,因此如果您检查 glibc 2.32,您会看到这个宏在系统调用方面得到了正确实现。
我正在研究pthread_mutex_lock
,发现pthread_mutex_lock
最终会在glibc(version 2.27)中调用一个宏lll_futex_timed_wait()
,我下载了glibc源但是显示lll_futex_timed_wait()
被定义为 -ENOSYS
, 什么意思以及如何得到它的真实定义(应该是系统调用, 我也得到了 linux 内核的源码)?
//glibc-2.27/sysdeps/nptl/lowlevellock-futex.h
/* Wait until a lll_futex_wake call on FUTEXP, or TIMEOUT elapses. */
#define lll_futex_timed_wait(futexp, val, timeout, private) \
-ENOSYS
glibc 的一大块由 sysdeps
子树下的系统和体系结构相关位组成。您看到的是一个通用存根,只有在 glibc 未针对特定平台构建正确配置时才会被编译。
那些较旧的 glibc 版本中低级 futex 细节的实际实现将位于 sysdeps/unix/sysv/linux/lowlevellock-futex.h
有趣的是,在最近的 glibc 版本中,代码被提升为“公共”树,因此如果您检查 glibc 2.32,您会看到这个宏在系统调用方面得到了正确实现。