linux文件锁的应用,POSIX,unix标准,linux标准

摘要:
二者在技术方面和文化方面都存在很多分歧,导致应用程序很难在不同的系统上平滑地进行移植,为了解决这个问题,IEEE的1003委员会着手开发了一系列标准,这就是后来的POSIX标准。但是很多其他系统都也兼容POSIX标准。例如,微软的WindowsNT就兼容POSIX标准的实时部分,而RTOS(Lynx

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

linux文件锁的应用,POSIX,unix标准,linux标准第1张

开启强制性锁,需要对特定文件打开 设置-组-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标准》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇exynos4412,tegra3,msm8960性能对比,参考对照exynos4210UE4_攻击伤害1_射线检测下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux下C语言多文件的编译以及makefile的应用

1.关于编译和链接     一般来说,无论是C、C++,首先要把源文件编译成中间代码文件,在Windows下也就是.obj文件,UNIX下是.o文件,即Object File,这个动作叫做编译(compile)。然后再把大量的Object File合成执行文件,这个动作叫作链接(link)。         也就是源文件(.c 文件或者.cpp文件)首先会...

linux下shell编程示例-获取进程id

今天初步学习了一下linux下的shell编程,简单记录一下测试用例 1.编辑shell脚本文件如下: #!/bin/bashecho "hello bash linux"echo "第0个参数:$0"echo "第一个参数:$1"echo "当前子shell进程:$$" #pidarr=`ps x | awk '{print $1}'`pidarr=$(...

【宝塔linux】 导入mysql 大文件失败的问题

导入数据库有四种方法 1、宝塔网站自带的数据库导入 2、phpmyadmin导入 3、远程到linux服务器用导入命令 使用xshell进入到控制台 1、首先建空数据库 mysql>create database dbname ; 2、导入数据库 方法一: (1)选择数据库 mysql>use dbname ; (2)设置数据...

使用 linux kernel +busybox 定制linux系统

目的: 了解linux的启动过程 主要内容: 1.grub 是启动程序的bootloader 2.linux-kernel 是linux的开源内核 3.busybox 是linux的工具集合 启动顺序: grub-> bzimage > initrd > init > chroot sbin/init (从内存镜像转换成rootfs...

linux的flock命令(文件锁)

mysql,如果多个请求同时,请求操作一个表,一个存,一个读,就会造成脏读.所以有了事务,有了锁表 linux在多个进程同时操作同一份文件的时候,很容易导致文件混乱,这时候就需要锁,来保证文件的完成性. flock主要三种操作类型: lock_sh,常被用作读共享锁; LOCK_EX,只能被一个进行使用,常被用作写锁; LOCK_UN,释放锁; pub...

Linux C errno出错处理

1. 出错处理errno 每个进程维护一个全局整型变量errno, 记录系统(调用)的最后一次错误代码. errno及其常量值定义位于<errno.h>.以前, errno不是线程安全的, 其定义是: extern int errno; 现在, 为支持多线程环境, errno定义是: extern int *__errno_location(...