#ifndef ACL_FLOCK_INCLUDE_H
#define ACL_FLOCK_INCLUDE_H

#ifdef  __cplusplus
extern "C" {
#endif

#include "acl_define.h"

/**
 * 对打开的文件句柄进行加锁
 * @param fd {ACL_FILE_HANDLE} 文件句柄
 * @param lock_style {int} 系统提供的API加锁类型（仅对UNIX有效）
 *  ACL_FLOCK_STYLE_FLOCK or ACL_FLOCK_STYLE_FCNTL
 * @param operation {int} 加锁操作方式, ACL_FLOCK_OP_XXX
 * @return {int} 0: 加锁成功; -1: 加锁失败
 */
ACL_API int acl_myflock(ACL_FILE_HANDLE fd, int lock_style, int operation);

/*
 * Lock styles.
 */
#define ACL_FLOCK_STYLE_FLOCK     1  /**< 调用 flock 函数加锁(unix) */
#define ACL_FLOCK_STYLE_FCNTL     2  /**< 调用 fcntl 函数加锁(unix) */

/*
 * Lock request types.
 */
#define ACL_FLOCK_OP_NONE         0  /**< 解锁 */
#define ACL_FLOCK_OP_SHARED       1  /**< 共享锁 */
#define ACL_FLOCK_OP_EXCLUSIVE    2  /**< 排它独享锁 */

/**
 * 无等待加锁, 可以与 ACL_FLOCK_OP_SHARED, 或 ACL_FLOCK_OP_EXCLUSIVE 相与,
 * 可以与 ACL_FLOCK_OP_SHARED 相与
 */
#define ACL_FLOCK_OP_NOWAIT       4

/**
 * 加锁方式的位集合
 */
#define ACL_FLOCK_OP_BITS \
	(ACL_FLOCK_OP_SHARED | ACL_FLOCK_OP_EXCLUSIVE | ACL_FLOCK_OP_NOWAIT)

#ifdef  __cplusplus
}
#endif

#endif
