文件加锁

//功能: 对文件加锁(适用于文件已经打开的情况)
int FileLocker::LockFile(const int fd, const short nLockMode /* = F_WRLCK */)
{
    struct flock aLock;
    aLock.l_type = nLockMode;
    aLock.l_whence = SEEK_SET;
    aLock.l_start = 0;
    aLock.l_len = 0;
    // 使用 F_SETLKW 表示如果获取不到锁资源,就无限期等待
    // 所以,如果函数返回-1,就说明有异常情况发生
    // fcntl 在参数为 F_SETLKW 时,返回值是"Value other than -1."
    // 所以,只能对其进行判断
    if (fcntl(fd, F_SETLKW, &aLock) == -1)
    {
        return -1;
    }
    return 0;
}

你可能感兴趣的:(文件加锁)