📄 flock.m4
字号:
# SYNOPSIS## AMANDA_SETUP_FILE_LOCKING## OVERVIEW## Set up file locking support. Four types of locking are available:# USE_POSIX_FCNTL - use fcntl(). The full job.# USE_FLOCK - use flock(). Does just as well.# USE_LOCKF - use lockf(). Only handles advisory, exclusive,# blocking file locks as used by Amanda.# USE_LNLOCK - Home brew exclusive, blocking file lock.# <none> - No locking available. User beware!# One of given symbols are defined if the method is discovered to# be available; the methods are searched in the above order.#AC_DEFUN([AMANDA_SETUP_FILE_LOCKING],[ AC_CHECK_HEADERS( fcntl.h \ sys/fcntl.h \ sys/types.h \ sys/file.h \ unistd.h \ ) # find a working file-locking mechanism. # Note: these all use AC_TRY_LINK to make sure that we can compile # and link each variant. They do not try to test the variants -- # that is left to runtime. WORKING_FILE_LOCK="no" # check POSIX locking AC_CACHE_CHECK( [whether POSIX locking (with fcntl(2)) is available], amanda_cv_posix_filelocking, [ AC_TRY_LINK([#if HAVE_SYS_TYPES_H# include <sys/types.h>#endif#if HAVE_UNISTD_H# include <unistd.h>#endif#if HAVE_FCNTL_H# include <fcntl.h>#endif ], [ struct flock lock; lock.l_type = F_RDLCK; lock.l_start = 0; lock.l_whence = SEEK_CUR; lock.l_len = 0; return fcntl(1, F_SETLK, &lock); ], [ amanda_cv_posix_filelocking="yes" ],[ amanda_cv_posix_filelocking="no" ]) ]) if test "x$amanda_cv_posix_filelocking" = xyes; then AC_DEFINE(WANT_AMFLOCK_POSIX,1,[Define to use POSIX (fcntl()) for file locking]) WANT_AMFLOCK_POSIX="yes" WORKING_FILE_LOCK="yes" fi AM_CONDITIONAL(WANT_AMFLOCK_POSIX, test x"$WANT_AMFLOCK_POSIX" = x"yes") # check flock-based (BSD) locking AC_CACHE_CHECK( [whether flock locking is available], amanda_cv_flock_filelocking, [ AC_TRY_LINK([#if HAVE_SYS_FILE_H# include <sys/file.h>#endif ], [ return flock(1, LOCK_SH); ], [ amanda_cv_flock_filelocking="yes" ],[ amanda_cv_flock_filelocking="no" ]) ]) if test "x$amanda_cv_flock_filelocking" = xyes; then AC_DEFINE(WANT_AMFLOCK_FLOCK,1,[Define to use flock(2) for file locking]) WANT_AMFLOCK_FLOCK="yes" WORKING_FILE_LOCK="yes" fi AM_CONDITIONAL(WANT_AMFLOCK_FLOCK, test x"$WANT_AMFLOCK_FLOCK" = x"yes") # check lockf-based (SVR2, SVR3, SVR4) locking AC_CACHE_CHECK( [whether lockf(3) locking is available], amanda_cv_lockf_filelocking, [ AC_TRY_LINK([#if HAVE_UNISTD_H# include <unistd.h>#endif ], [ return lockf(1, F_LOCK, 0); ], [ amanda_cv_lockf_filelocking="yes" ],[ amanda_cv_lockf_filelocking="no" ]) ]) if test "x$amanda_cv_lockf_filelocking" = xyes; then AC_DEFINE(WANT_AMFLOCK_LOCKF,1,[Define to use lockf(3) for file locking.]) WANT_AMFLOCK_LOCKF="yes" WORKING_FILE_LOCK="yes" fi AM_CONDITIONAL(WANT_AMFLOCK_LOCKF, test x"$WANT_AMFLOCK_LOCKF" = x"yes") # check our homebrew hardlink-based locking (requires hardlinks) AC_CACHE_CHECK( [whether link(2) is available for locking], amanda_cv_lnlock_filelocking, [ AC_TRY_LINK([#if HAVE_UNISTD_H# include <unistd.h>#endif ], [ return link("/tmp/foo", "/tmp/bar"); ], [ amanda_cv_lnlock_filelocking="yes" ],[ amanda_cv_lnlock_filelocking="no" ]) ]) if test "x$amanda_cv_lnlock_filelocking" = xyes; then AC_DEFINE(WANT_AMFLOCK_LNLOCK,1,[Define to use link(2) to emulate file locking.]) WANT_AMFLOCK_LNLOCK="yes" WORKING_FILE_LOCK="yes" fi AM_CONDITIONAL(WANT_AMFLOCK_LNLOCK, test x"$WANT_AMFLOCK_LNLOCK" = x"yes") if test x"$WORKING_FILE_LOCK" = "no"; then # this shouldn't happen, and is *bad* if it does AC_MSG_ERROR([*** No working file locking capability found!]) fi])
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -