美文网首页
2020-09-10 windows下实现fcntl函数功能

2020-09-10 windows下实现fcntl函数功能

作者: 昨天今天下雨天1 | 来源:发表于2020-09-10 15:44 被阅读0次

    fcntl函数是linux下的一个文件锁函数,用以加密文件,给文件上锁,防止文件同时被多个进程操作。
    我遇到的主要是这两个:

    fcntl.flock(f, fcntl.LOCK_EX)
    fcntl.flock(f, fcntl.LOCK_UN)
    
    

    但是在windows下执行时发现并没有这个函数,不支持,所以就去找了各种方法来代替。

    安装pywin32来实现文件锁

    1. 先pip安装pywin32 :

    pip install pywin32
    pip list  #查看是否在已安装列表中
    
    

    安装完成之后,需要将C:\Python27\Lib\site-packages\pywin32_system32目录下的.dll文件复制到C:\Windows\System32目录下,这样便可以引用一下三个模块了:
    import win32con \\ import pywintypes \\ import win32file

    2. 设计fcntl()函数代码

    复制以下代码段,保存为fcntlock.py文件,将其放到引用的目录下,通过import fcntlock as fcntl 引入模块即可,亲测有效。

    import os
    import win32con
    import pywintypes
    import win32file
    
    LOCK_EX = win32con.LOCKFILE_EXCLUSIVE_LOCK
    LOCK_SH = 0  # The default value
    LOCK_NB = win32con.LOCKFILE_FAIL_IMMEDIATELY
    __overlapped = pywintypes.OVERLAPPED()
    
    def lock(file, flags):
        hfile = win32file._get_osfhandle(file.fileno())
        win32file.LockFileEx(hfile, flags, 0, 0xffff0000, __overlapped)
    def unlock(file):
        hfile = win32file._get_osfhandle(file.fileno())
        win32file.UnlockFileEx(hfile, 0, 0xffff0000, __overlapped)
    
    

    例如:(我是放在util目录下的)

    import util.fcntlock as fcntlock
    import os
    with open(name, 'w') as f:
            f.write(str)
            f.flush()
            os.fsync(f)
            fcntlock.lock(f, fcntlock.LOCK_EX)
            os.rename(name, path)
            fcntlock.unlock(f)
    

    相关文章

      网友评论

          本文标题:2020-09-10 windows下实现fcntl函数功能

          本文链接:https://www.haomeiwen.com/subject/ryypektx.html