一、概述
Linux提供了多种特性来实现文件锁定。其中最简单的方法就是以原子操作的方式创建锁文件,所谓“原子操作”就是在创建锁文件时,系统将不允许任何其它的事情发生。这就给程序提供了一种确保它所创建的文件是唯一性的方式,且该文件不可能被其它程序在同一时刻创建。
二、方法
锁文件仅仅是充当一个指示器的角色,程序间需要通过相互协作来使用它们。锁文件只是建议性锁,与此对立的是强制性锁。
为创建一个用作指示器的文件,我们使用带O_CREATE和O_EXCL标志的open系统调用。这将使我们以一个原子操作同时完成两项工作:确定文件不存在,然后创建它。
三、实现
| //file : lock.c #i nclude <unistd.h> #i nclude <stdlib.h> #i nclude <stdio.h> #i nclude <fcntl.h> #i nclude <errno.h> int main() { int file_desc; int save_errno; file_desc = open("/tmp/LockFile.test", O_RDWR | O_CREAT | O_EXCL, 0444); if (file_desc < 0) { save_errno = errno; printf("Open failed with error is %d\n", save_errno); } else { printf("Open succeeded\n"); } exit(EXIT_SUCCESS); } |
第一次运行程序:
$ lock
输出如下:
Open succeeded
我们再次运行程序:
$ lock
输出如下:
Open failed with error is 17
分析:
第一次运行程序时,由于文件并不存在,所以执行成功。对于后续的执行,因为文件已经存在而失败了。若想程序再次执行成功,必须删除锁文件。
在Linux系统中,通常错误号码17代表的是EEXIST,此错误用以表示一个文件已存在。错误号定义在头文件errno.h或(更常见的)它所包含的头文件中。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
- Windows操作系统安装 (16150篇文章)
- 系统优化大全 (18725篇文章)
- 系统安全设置 (24371篇文章)
- 操作系统常见故障解析 (4557篇文章)
- 配置安全的操作系统 (10239篇文章)
- 系统安装手册 (21513篇文章)
- 系统备份专题 (18132篇文章)
- Linux集群技术 (9014篇文章)
- 体验Linux的音影世界 (8682篇文章)
- Linux驱动大全 (9501篇文章)
- Linux FTP服务器和SVN服务器的配置 (39次浏览)
- 如何在Linux环境下安装Oracle 数据库11g (38次浏览)
- Linux终端模式下查看电脑的硬件配置信息小技 (37次浏览)
- linux文件系统基础知识 (33次浏览)
- tar命令详解 (32次浏览)
- 实例解析:Linux操作系统的TCP/IP协议栈 (30次浏览)
- 类似WOW的Savage 2发布Linux客户端(下载) (30次浏览)
- Vista、XP和Ubuntu Linux多系统安装方法 (24次浏览)
- 新手学堂:Linux操作系统网络安装总结 (23次浏览)
- 腾讯QQ官方首次支持Linux操作系统 (23次浏览)



