美文网首页
flock v.s. fcntl

flock v.s. fcntl

作者: suesai | 来源:发表于2021-09-19 10:05 被阅读0次

共同点

  1. 都支持阻塞和非阻塞模式

  2. 只能操作于文件,而不是目录

  3. 当进程结束或者终止的时候,锁都会被自动释放

flock

  1. 只能是劝告锁,因此其他进程只要拥有合适的权限,可以自由地访问文件

  2. 和 fd 相对应(BSD lock)

  3. fork、dup 后复制的 fd 拥有相同的锁,且对其中任意一个 fd 进行 LOCK_UN 操作都会释放锁,或者这些 fd 都被关闭

  4. 使用 open 对同一个文件打开两个 fd,这两个的 fd 对应的 锁是相互独立的:如果使用 fd1 锁定,那么再使用 fd2 锁定就会失败

  5. 获得的锁会在 execve 中被保留下来

  6. 将锁从共享转换成互斥,或者反方向转换,不是原子操作,而是先释放旧锁,然后添加新锁

  7. 不能用于 NFS

  8. 不进行死锁检查

fcntl

  1. 劝告记录锁

  2. 与(inode, pid)相对应

  3. 锁不会随着 fork 而被继承,但是在 execve 中被保留了下来

  4. 由于 stdio 有缓存,该锁不应使用 stdio,而应配合 read, write 来使用

  5. 对于文件的一个区域,一个进程只能拥有一种锁,如果要在这个区域施加新锁,那么旧锁会被转化成新锁

  6. 内核会进行死锁检查

  7. 如果进程关闭了文件的任何一个描述符,则与这个文件相关的所有锁都会被释放;线程共享同一个锁,也就是没办法同步线程

  8. 也可以和 fd 相对应,如果如此则解决了第八个问题

  9. 强制锁,租借锁

参考

File locking in Linux

相关文章

  • flock v.s. fcntl

    共同点 都支持阻塞和非阻塞模式 只能操作于文件,而不是目录 当进程结束或者终止的时候,锁都会被自动释放 flock...

  • 2020-08-31 Python中给文件加锁解锁

    fcntl模块:flock() : flock(f, operation)operation : 包括:fcntl...

  • Linux Lock - flock and fcntl

    FD vs OFD FD (File Descriptor) :在进程内打开一个文件,返回一个FD,用户态的概念。...

  • NFS Client in Linux Kernel - Loc

    1. System Call flock fcntl 2. 内核中的Lock 分为两种lock,但在内核中统一成f...

  • chapter11-13

    part one vacabularies 1,flock 动词 蜂拥;群集 If people flock to...

  • 10.fcntl函数介绍

    fcntl函数介绍 ####### fcntl的原型和作用 fcntl函数是一个多功能文件管理的工具箱,接收2个参...

  • fcntl

    fcntl是计算机中的一种函数,通过fcntl可以改变已打开的文件性质。fcntl针对描述符提供控制。参数fd是被...

  • 非阻塞socket总结

    非阻塞socket设置方法: fcntl(socket_fd, F_SETFL, fcntl (socket_fd...

  • flock

    flock()会依参数operation所指定的方式对参数fd所指的文件做各种锁定或解除锁定的动作。此函数只能锁定...

  • python: globals() v.s. locals()

    globals() v.s. locals() v.s. vars() globals()always retur...

网友评论

      本文标题:flock v.s. fcntl

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