Подтвердить что ты не робот

Проверка Autoconf для struct flock

fcntl() использует структуру struct flock для определения и проверки блокировок файлов. К сожалению, в разных системах Unix поля в этой структуре находятся в другом порядке. Кто-нибудь знает, как можно проверить его с помощью autoconf или, по крайней мере, проверить, соответствует ли структура определенному формату (например, вопрос будет - формат структуры соответствует формату Linux)?

4b9b3361

Ответ 1

Вы можете использовать этот макрос autoconf, чтобы определить, существует ли какой-либо элемент struct flock:

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

Github имеет множество файлов autoconf, на которые вы можете посмотреть дополнительные идеи поиск "struct flock" в файлах *.ac.

Обновление: Проблема заказа struct flock обсуждается в старой записи в списке debian-bugs.

Мы могли бы вдохнуть эту ошибку и сделать это в настройке:

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

Вы также можете выполнить эту проверку в своей программе во время выполнения, она не должна быть этапом настройки.