Autoconf check for struct flock

前端 未结 1 1994
渐次进展
渐次进展 2021-02-19 10:14

fcntl() uses struct flock structure to define and check file locks. Unfortunately, on different Unix systems the fields in this structure are in differ

相关标签:
1条回答
  • 2021-02-19 11:15

    You can use this autoconf macro to find if a certain member of struct flock exists:

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

    Github has a variety of autoconf files you can look at for additional ideas by searching for "struct flock" in *.ac files.

    Update: The problem of struct flock order is discussed in an old post on the debian-bugs list.

    We could take inspiration from that bug and do this in configure:

    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") )
    

    You can also do this check in your program at runtime, it doesn't have to be a configure step.

    0 讨论(0)
提交回复
热议问题