【问题标题】:Autoconf check for struct flockAutoconf 检查结构群
【发布时间】:2013-03-14 11:00:12
【问题描述】:

fcntl() 使用struct flock 结构来定义和检查文件锁。不幸的是,在不同的 Unix 系统上,此结构中的字段顺序不同。有谁知道如何使用 autoconf 进行检查,或者至少检查结构是否为特定格式(例如,问题是 - 结构格式是否与 Linux 格式匹配)?

【问题讨论】:

    标签: c linux unix autotools autoconf


    【解决方案1】:

    您可以使用此 autoconf 宏来查找 struct flock 的某个成员是否存在:

    AC_CHECK_MEMBERS([struct flock.l_type],[],[],[[#include <fcntl.h>]])
    

    Github 有各种 autoconf 文件,您可以通过searching for "struct flock" in *.ac files.查看更多想法

    更新:struct flock订单的问题是discussed in an old post on the debian-bugs list.

    我们可以从该错误中获得灵感,并在配置中执行此操作:

    AC_MSG_CHECKING("whether flock struct is linux ordered or not")
    AC_TRY_RUN([
      #include <fcntl.h>
      struct flock lock = { 1, 2, 3, 4, 5 };
      int main() { return lock.l_type==1 ? 0 : 1; }
    ], [
        AC_DEFINE(HAVE_FLOCK_LINUX) 
        AC_MSG_RESULT("yes")
    ], AC_MSG_RESULT("no") )
    

    您也可以在运行时在程序中执行此检查,它不必是配置步骤。

    【讨论】:

    • 问题是,例如,Linux 和 *BSD 都有 l_type 但在结构中的不同位置。我需要弄清楚我有哪一个。例如。在 linux 上 l_type 是第一个,在 *BSD 上是第四个。
    • 随着更新,我喜欢这种方法,我会尝试一下,看看它是否有效。
    • 作为替代方法,您可以使用offsetof 工具在结构中查找l_type 的偏移量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    相关资源
    最近更新 更多