Autoconf检查struct flock

fcntl()使用struct flock结构来定义和检查文件locking。 不幸的是,在不同的Unix系统中,这个结构中的字段顺序不同。 有谁知道如何用autoconf检查它,或者至less检查结构是否是特定的格式(例如问题是 – 结构格式是否与Linux格式匹配)?

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

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

Github有各种autoconf文件,你可以通过在* .ac文件中搜索“struct flock”来查看更多的想法。

更新: 在debian-bugs列表的旧帖子中讨论了struct flock命令的问题。

我们可以从这个bug中获取灵感,并在配置中执行此操作:

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

你也可以在运行时检查你的程序,它不一定是一个配置步骤。