"""Cross-platform file locking: fcntl.flock on Unix, msvcrt on Windows.

注意：Windows 上 msvcrt.locking 不支持共享锁语义，
LOCK_SH 和 LOCK_EX 在 Windows 上行为相同（都是排他锁）。
"""
import sys

if sys.platform == 'win32':
    import errno
    import os
    import msvcrt

    LOCK_EX = 1
    LOCK_SH = 1  # 注意：Windows 上共享锁实际是排他锁
    LOCK_UN = 8
    LOCK_NB = 4

    def flock(fd, op):
        if op & LOCK_UN:
            msvcrt.locking(fd, msvcrt.LK_UNLCK, 1)
        elif op & LOCK_NB:
            try:
                msvcrt.locking(fd, msvcrt.LK_NBLCK, 1)
            except OSError:
                raise BlockingIOError(
                    errno.EAGAIN,
                    os.strerror(errno.EAGAIN),
                )
        else:
            msvcrt.locking(fd, msvcrt.LK_LOCK, 1)

else:
    import fcntl
    from fcntl import LOCK_EX, LOCK_SH, LOCK_UN, LOCK_NB, flock
