zoukankan      html  css  js  c++  java
  • unix linux 文件锁

    有三种不同的文件锁,这三种都是“咨询性”的,也就是说它们依靠程序之间的
    合作,所以一个项目中的所有程序封锁政策的一致是非常重要的,当你的程序需
    要和第三方软件共享文件时应该格外地小心。

    有 些程序利用诸如 FIlENAME.lock 的文件锁文件,然后简单地测试此类文件是否存在。这种方法显然不太好,因为当产生文件的进程被杀后,锁文件依然存在,这样文件也许会被永久锁住。UUCP 中把产生文件的进程号PID存入文件,但这样做仍然不保险,因为PID的利用是回收型的。

    这里是三个文件锁函数:
         flock();
         lockf();
         fcntl();

    flock()是从BSD中衍生出来的,但目前在大多数UNIX系统上都能找到,在单个主
    机上flock()简单有效,但它不能在NFS上工作。Perl中也有一个有点让人迷惑的
    flock()函数,但却是在perl内部实现的。

    fcntl()是唯一的符合POSIX标准的文件锁实现,所以也是唯一可移植的。它也同
    时是最强大的文件锁--也是最难用的。在NFS文件系统上,fcntl()请求会被递
    交给叫rpc.lockd的守护进程,然后由它负责和主机端的lockd对话,和flock()
    不同,fcntl()可以实现记录层上的封锁。

    lockf()只是一个简化了的fcntl()文件锁接口。

    无论你使用哪一种文件锁,请一定记住在锁生效之前用sync来更新你所有的文件
    输入/输出。


  • 相关阅读:
    关于商业智能(Business Intelligence,简称BI)的认识
    Python连接mysql数据库和关闭数据库的方法
    Python 列表list方法clear( )和直接list [ ]的区别
    截止今天学习大数据技术的笔记
    【已解决】hive导出mysql报错:Container [pid=3962,containerID=container_1632883011739_0002_01_000002] is running 270113280B beyond the 'VIRTUAL' memory limit.
    sqoop安装配置以及简单使用
    大数据相关常用命令行或操作
    阿里巴巴数据库设计规范
    【已解决】linux环境jps命令不显示进程
    【已解决】初始化 Hive 元数据库报错slf4j-log4j12-1.7.25.jar包冲突
  • 原文地址:https://www.cnblogs.com/hjslovewcl/p/2314333.html
Copyright © 2011-2022 走看看