13

fcntl()構造を使用struct flockしてファイルロックを定義およびチェックします。残念ながら、異なるUnixシステムでは、この構造のフィールドは異なる順序になっています。autoconfでそれをチェックする方法、または少なくとも構造が特定の形式であるかどうかをチェックする方法を知っている人はいますか(たとえば、質問は-struct形式はLinux形式と一致しますか)?

4

1 に答える 1

3

このautoconfマクロを使用して、の特定のメンバーがstruct flock存在するかどうかを確認できます。

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

Githubにはさまざまなautoconfファイルがあり、*。acファイルで「structflock」を検索することで追加のアイデアを探すことができます。

更新:struct flock順序の問題は、debian-bugsリストの古い投稿で説明されています。

そのバグからインスピレーションを得て、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") )

実行時にプログラムでこのチェックを行うこともできます。構成ステップである必要はありません。

于 2013-03-25T02:50:01.080 に答える