加锁、解锁及测试代码 lock.c
#include
#include
#include
#include
#include
#define TRUE 1
#define FALSE 0
/**
* @brief 尝试获取文件锁
* @details 获取文件锁时不会阻塞进程, 获取不到锁时,立即返回不会等待
* @param fd 文件描述符
* @return 是否成功获取文件锁
* @retval TRUE 获取锁成功
* @retval FALSE 获取锁失败
* @attention 这里只是建议性锁,每个使用上锁文件的进程都要检查是否有锁存在,
* 内核不对读写操作做内部检查和强制保护
* @see ngx_trylock_fd
* @ref [http://agentzh.org/misc/code/nginx/os/unix/ngx_files.c.html#L416]
*/
int trylock_fd(int fd)
{
struct flock fl;
memset(&fl, 0, sizeof(struct flock));
fl.l_type = F_WRLCK;
fl.l_whence = SEEK_SET;
if (fcntl(fd, F_SETLK, &fl) == -1) {
return FALSE;
} else {
return