fcntl()
使用struct flock
结构来定义和检查文件锁。不幸的是,在不同的Unix系统上,这种结构中的字段顺序不同。有人知道如何使用autoconf检查它或至少检查结构是否采用特定格式(例如问题是 - 结构格式是否与Linux格式匹配)?
答案 0 :(得分:3)
您可以使用此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") )
您也可以在运行时检查程序,它不必是配置步骤。