linux文件锁的应用,POSIX,unix标准,linux标准
1. perl,flock加锁。java也能加锁。
2. 先创建文件并打开,才能加锁(写打开?)。
3. 可以用于判断进程是否一直在运行(用另一进程判断),如果锁一直在,则进程在;锁不在,则原进程或意外中断。
4. 可以用于互斥,使得同一时间只有一个脚本运行(一般使用非阻塞模式)。
5. 多进程系统中,文件锁可以用于进程互斥。
6. 为了避免对同一文件读写冲突,在写的时候可以写入另一个文件如**.tmp,然后使用命令`mv **.tmp **`,因为linux保证了mv操作是原子性,所以读打开的时候会打开最新的文件。
7. 不用语言使用文件锁函数时无效的问题。perl加锁了,java仍然可以进行锁操作。
perl和python加锁使用的是flock锁(古老一些),而java的FileLock加锁使用的是POSIX锁(新一些),所以perl加锁后,python不能再加锁了,但是java依然可以加锁。
http://blog.csdn.net/mr_mumu/article/details/50828988
查看/proc/locks可以知道对文件的加锁,在使用perl和java分别对同一个文件加锁之后,显示如下:
$ cat /proc/locks
1: POSIX ADVISORY WRITE 37898 08:01:803341 0 EOF
2: POSIX ADVISORY WRITE 2529 08:01:920589 0 0
3: POSIX ADVISORY READ 2502 08:01:920587 128 128
4: POSIX ADVISORY READ 2502 08:01:920585 1073741826 1073742335
5: POSIX ADVISORY WRITE 885 00:12:543 0 EOF
6: FLOCK ADVISORY WRITE 914 00:12:520 0 EOF
7: FLOCK ADVISORY WRITE 37934 08:01:803341 0 EOF
8: POSIX ADVISORY WRITE 84170 00:12:556 0 EOF
9: FLOCK ADVISORY WRITE 77257 00:15:4 0 EOF
10: POSIX ADVISORY READ 2514 08:01:920587 128 128
11: POSIX ADVISORY READ 2514 08:01:920585 1073741826 1073742335
12: POSIX ADVISORY READ 2508 08:01:920587 128 128
13: POSIX ADVISORY READ 2508 08:01:920585 1073741826 1073742335
14: FLOCK ADVISORY WRITE 1213 00:12:254 0 EOF
15: POSIX ADVISORY WRITE 1037 00:12:521 0 EOF
第一列表示锁的类型,有FLOCK和POSIX,第二列表示都是建议性锁(建议性锁的意思是,不具备强制性。一个进程使用flock将文件锁住,另一个进程可以直接操作正在被锁的文件,修改文件中的数据,原因在于flock只是用于检测文件是否被加锁,针对文件已经被加锁,另一个进程写入数据的情况,内核不会阻止这个进程的写入操作,也就是建议性锁的内核处理策略。)
第四列表示使用这个锁的进程。在上面的输出中,37898是java进程的pid,使用的是POSIX锁,而perl进程的pid是37934,使用了FLOCK锁。所以没有约束对方。
注意的是,父进程设置的锁,子进程不会继承。这也符合锁的定义,如果继承了,则会打破锁的功能,两个进程同时操作文件。exec()函数会继承打开的锁。
8. linux系统建议性锁和强制性锁。
http://www.linuxidc.com/Linux/2016-11/137614.htm
http://search.cpan.org/~jtt/File-FcntlLock-0.14/lib/File/FcntlLock.pm

开启强制性锁,需要对特定文件打开 设置-组-ID位,关闭 组-执行位。
9. POSIX标准
可移植操作系统接口(英语:Portable Operating System Interface,缩写为POSIX),是IEEE为要在各种UNIX操作系统上运行软件,而定义API的一系列互相关联的标准的总称,其正式称呼为IEEE Std 1003,而国际标准名称为ISO/IEC 9945。
此标准源于一个大约开始于1985年的项目。POSIX这个名称是由理查德·斯托曼应IEEE的要求而提议的一个易于记忆的名称。它基本上是Portable Operating System Interface(可移植操作系统接口)的缩写,而X则表明其对Unix API的传承。
https://stackoverflow.com/questions/1780599/i-never-really-understood-what-is-posix
https://www.zhihu.com/question/21048638
比较详细的说明参考:http://blog.csdn.net/u012724405/article/details/20306379
Unix 1969 年诞生于 AT&T 贝尔实验室,并在 1973 年使用 C 语言进行了重写,从此就具有了很好的可移植性。但是当 AT&T 在 1984 年由于分拆而得以进入计算机领域的市场之后,却引发了 Unix 业界的一场大战。当时最为主要的两个版本是 AT&T 的 System V 和伯克利的 BSD。二者在技术方面(例如终端)和文化方面都存在很多分歧,导致应用程序很难在不同的系统上平滑地进行移植,为了解决这个问题,IEEE (Institute of Electrical and Electronic Engineers)的 1003 委员会着手开发了一系列标准,这就是后来的 POSIX(Portable Operating System Interface for UNIX)标准。其目的是为那些兼容各种 UNIX 变种的应用程序制定应用程序编程接口(API)规范,从而确保这些应用程序的兼容性。这些标准后来被 ISO/IEC 采纳,成为 ISO/IEC 9945 标准。
POSIX 在 15 份不同的文档中对操作系统与用户软件的接口进行了规范,主要内容包括3个部分:
- POSIX 系统调用
- POSIX 命令和工具
- POSIX 兼容测试
同时还提供了一套 POSIX 兼容性测试工具,称为 PCTS(POSIX Conformance Test Suite)。
后来 POSIX 标准又进行了很多扩充,主要包括:
- POSIX.1,核心服务:主要集成了 ANSI C 标准,包括进程创建和控制、信号、浮点异常、段错误、非法指令、总线错误、定时器、文件和目录操作、管道、C 标准库、I/O 端口和控制
- POSIX.1b,实时扩展:包括优先级调度、实时信号、时钟和定时器、信号量、消息传递、共享内存、异步和同步 I/O、内存锁
- POSIX.1c,线程扩展:包括线程创建和控制、线程调度、线程同步、信号处理
POSIX 最初的设计目标是为 Unix System V 和 BSD Unix 等 Unix 系统上的特性制定规范,使其可以实现更好的可移植性。但是很多其他系统都也兼容POSIX 标准。例如,微软的 Windows NT 就兼容 POSIX 标准的实时部分(POSIX.1b),而 RTOS(LynxOS real-time operating system)也与 POSIX 标准兼容。Windows 上可以通过安装 Windows 的 Services for UNIX 或 Cygwin 来增强对 POSIX 标准的兼容度。
遵循这个标准的好处是软件可以跨平台。
linux/unix的大部分系统调用在posix标准中进行了重新实现,虽然接口都一样,但是包含的头文件有些区别。不同的操作系统对标准进行不同的方式实现,但是既然是标准就要求函数的名称、参数列表、返回值以及执行效果必须是相同的。
10. unix标准
单一UNIX规范(英语:Single UNIX Specification,缩写为SUS),它是一套UNIX系统的统一规格书。扩充了POSIX标准,定义了标准UNIX操作系统。
11. linux标准
Linux标准规范(英语:Linux Standard Base,缩写为 LSB)是一个在Linux基金会结构下对Linux发行版的联合项目,其目标使Linux操作系统匹配软件系统架构,或文件系统架构标准的规范及标准。LSB基于POSIX,统一UNIX规范及其他开放标准,在某些领域扩展它们。
linux文件锁的应用,POSIX,unix标准,linux标准的更多相关文章
- Vi (Unix及Linux系统下标准的编辑器)VIM (Unix及类Unix系统文本编辑器)
Vi是Unix及Linux系统下标准的编辑器.学会它后,您将在Linux的世界里畅行无阻.基本上vi可以分为三种状态,分别是命令模式.插入模式,和底行模式. vi编辑器是所有Unix及Linux系统下 ...
- Linux是一个基于POSIX和Unix的多用户、多任务、支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播。
Linux是一个基于POSIX和Unix的多用户.多任务.支持多线程和多CPU的性能稳定的操作系统,可免费使用并自由传播. Linux是众多操作系统之一 , 目前流行的服务器和 PC 端操作系统有 L ...
- 《Unix&Linux大学教程》学习笔记四:标准I/O 与 过滤器
1:标准IO Unix中的标准IO主要包括:标准输入.标准输出(正常输出).标准错误(异常信息) 2:重定向输出 内容 > 文件名 :将内容输出到文件,并且覆盖文件原来内容:文件不存在则新建 内 ...
- 1.Unix,Linux起源与编译原理
一.UNIX操作系统 作者:丹尼斯.里奇,肯.汤普逊 版权:贝尔实验室 时间:1971 特点:多用户,多任务(多进程),多CPU(多种CPU架构),高安全,高可靠,高性能,高稳定 应用:构 ...
- Unix和Linux下C语言学习指南
转自:http://www.linuxdiyf.com/viewarticle.php?id=174074 Unix和Linux下C语言学习指南 引言 尽管 C 语言问世已近 30 年,但它的魅力仍未 ...
- 【Linux基础】Unix与Linux操作系统介绍
一.Unix和Linux操作系统概述 1.Unix是什么 UNIX是一个计算机操作系统,一个用来协调.管理和控制计算机硬件和软件资源的控制程序. 2.Unix特点 (1)多用户:在同一时刻可以有多个用 ...
- linux学习笔记:第二单元 UNIX和Linux操作系统概述
第二单元 UNIX和Linux操作系统概述 UNIX是什么 UNIX操作系统的特点 UNIX 与Linux的关系 GNU项目与自由软件 GUN计划 自由软件意味着什么 Linux简介 Linux是什么 ...
- Unix And Linux
摘抄与于:http://www.cnblogs.com/awpatp/category/200255.html vi命令速查图 摘要: Lesson 1 Lesson 2 Lesson 3 Lesso ...
- Unix、Linux、Windows操作系统的区别
1.操作区别 原文地址: https://blog.csdn.net/qq_41026740/article/details/96018808 linux区分大小写,windows在dos界面命令下不 ...
随机推荐
- Python - 3.6 学习四
错误.调试和测试 程序运行中,可能会遇到BUG.用户输入异常数据以及其它环境的异常,这些都需要程序猿进行处理.Python提供了一套内置的异常处理机制,供程序猿使用,同时PDB提供了调试代码的功能,除 ...
- mysql 修改配置文件性能优化
vim /etc/my.cnf 原配置文件 [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # ...
- SQL---->mySQl卸载for mac
因为装的时候弄坏了 先来学习下怎么卸载吧,如下输入终端就好了 cd ~/ sudo rm /usr/local/mysql sudo rm -rf /usr/local/mysql* sudo rm ...
- nginx挂维护页面
本篇文章摘抄于他人的文章,来自于CSDN的JeremyIT同学,但我还是自己重新敲一遍. 实现的效果是:访问网站的任何页面,都跳转到同一个页面.而这一个页面就是维护页面,可以根据需要修改. serve ...
- QQ 空间过滤器 for V8
最近 QQ空间升级到 V8 版本,做了很大的调整, 我也做了升级,由于时间关系,功能暂时只有 模块过滤,其他过滤请等待后续更新,谢谢大家的支持! 刚刚上线,不知道你们能否看到 https://chro ...
- 【手机自动化测试】monkey测试
1 概述 Monkey测试是Android自动化测试的一种手段.Monkey测试本身非常简单,就是模拟用户的按键输入,触摸屏输入,手势输入等,看设备多长时间会出异常. 当Mon ...
- Openstack(二)基本环境准备--网络、时间、yum源等
2.1服务器版本安装 2.1.1服务器使用:centos7.4 + vm12 2.1.2重命名网卡: 传递内核参数 net.ifnames=0 biosdevname=0,以更改网卡名称为eth0,e ...
- 前端页面汉子显示为问号,需修改 linux下面修改mysql 数据库的字符编码为utf8
设置MySQL数据库编码为UTF-8 登陆后查看数据库当前编码:SHOW VARIABLES LIKE 'char%'; 修改/etc/mysql/my.cnf (默认安装路径下) (标签下没有的添加 ...
- java.lang.UnsatisfiedLinkError: org.apache.hadoop.util.NativeCrc32.nativeComputeChunkedSumsByteArray(II[BI[BIILjava/lang/String;JZ)V
环境: Spark2.1.0 .Hadoop-2.7.5 代码运行系统:Win 7在运行Spark程序写出文件(savaAsTextFile)的时候,我遇到了这个错误: // :: ERROR U ...
- java一些基本的方法
一,Java中,next();和nextLine();有什么区别 举个例子,你就会明白了.如,你输入的一行:abc cde efg注意,其中abc和cde之间有空格,cde和efg之间也有空格这样,n ...