【问题标题】:why is the meaning of macro `-ENOSYS` in glibc?为什么 glibc 中宏 `-ENOSYS` 的含义是什么?
【发布时间】:2021-01-22 06:49:47
【问题描述】:

我正在研究pthread_mutex_lock,发现pthread_mutex_lock最终会在glibc(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


    【解决方案1】:

    一大块 glibc 由 sysdeps 子树下的系统和体系结构相关位组成。您正在查看的是一个通用存根,仅当 glibc 未针对特定平台构建正确配置时才会编译。

    那些较旧的 glibc 版本中低级 futex 细节的实际实现将驻留在 sysdeps/unix/sysv/linux/lowlevellock-futex.h 中

    有趣的是,在最近的 glibc 版本中,代码被提升为“通用”树,因此如果您检查 glibc 2.32,您会看到这个宏在系统调用方面正确实现。

    【讨论】:

      猜你喜欢
      • 2011-05-30
      • 2020-08-09
      • 2019-07-13
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 2011-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多