【问题标题】:Why does glibc disagree with the eventfd manpage?为什么 glibc 不同意 eventfd 联机帮助页?
【发布时间】:2016-03-17 17:47:51
【问题描述】:

man 2 eventfd 说:

概要

   #include <sys/eventfd.h>

   int eventfd(unsigned int initval, int flags);

但是在/usr/include/sys/eventfd.h 我看到了:

extern int eventfd (int __count, int __flags) __THROW;

我点击这个是因为我需要将eventfd 作为函数指针传递,并且当它具有手册页中描述的签名时我收到了警告。这个签名是不可移植的吗?我需要在我编写的代码中注意这一点吗?

【问题讨论】:

  • 在你链接到它的 glibc 树中是unsigned int __count
  • 请教 glibc 手册页的维护者。很可能,签名已更改,但没有人关心更新手册页。您甚至可以自己做出贡献并做出改变!
  • @IngoLeonhardt 哎呀,你说得对,我有一个脑死的时刻。查看历史显示他们在 2014 年对其进行了更改,这是对我的可移植性问题的回答。我已通过以下信息自行回答,但请随时用您自己的信息替换它,我会接受。
  • 手册页是 [kernel.org/doc/man-pages/](Linux man-pages) 项目的一部分。它不是由与 glibc 相同的人维护的。 Git repo 中最新版本的 eventfd 手册页仍然具有非当前声明。

标签: c linux system-calls manpage


【解决方案1】:

glibc 中的签名于 2014 年更改为 this commit 到 glibc 树:

diff --git a/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h b/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h
index 2d198a8..a3c340e 100644 (file)
--- a/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h
+++ b/sysdeps/unix/sysv/linux/hppa/sys/eventfd.h
@@ -40,7 +40,7 @@ __BEGIN_DECLS

 /* Return file descriptor for generic event channel.  Set initial
    value to COUNT.  */
-extern int eventfd (int __count, int __flags) __THROW;
+extern int eventfd (unsigned int __count, int __flags) __THROW;

 /* Read event counter and possibly wait for events.  */
 extern int eventfd_read (int __fd, eventfd_t *__value);

我想就可移植性而言,如果您有旧版本的glibc,那么您能做的最好的事情就是将指向eventfd 的指针转换为int (*f)(unsigned int, int)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 2013-06-04
    相关资源
    最近更新 更多