Linux文件锁的示例

为了理解文件锁是如何工作的,我们建立程序文件file_lock.c:

用gcc编译此程序:

# cc -o file_lock file_lock.c

使用mount命令带“mand”参数来重新挂载根文件系统,如下所示。这将在文件系统级别使能强制锁功能。

注意:你必须切换到root用户才能执行下面的命令。

# mount -oremount,mand /

在可执行的(file_lock所在的)目录中创建两个名为“advisory.txt”和“mandatory.txt”的文件。对于“mandatory.txt”使能Set-Group-ID,同时不使能Group-Execute-Bit,如下所示:

# touch advisory.txt

测试协同锁:执行示例程序,以“advisory.txt”作为参数。

# ./file_lock advisory.txt

此程序将等待用户的输入。从另一个终端或控制台,尝试输入以下命令行:

# ls >>advisory.txt

在上面的例子中,ls命令会将其输出写入到advisory.txt文件中。即使我们获得了一个写入锁,仍然会有一些进程(非合作)能够往文件里写入数据。这就是所谓的“协同”锁。

测试强制锁:再次执行示例程序,以“mandatory.txt”作为参数。

# ./file_lock mandatory.txt

从另一个终端或控制台,尝试输入以下命令行:

# ls >>mandatory.txt

在上面的例子中,ls命令在将其输出写入到mandatory.txt文件之前,会等待文件锁被删除。虽然它仍然是一个非合作进程,但强制锁起了作用。

22/2<12

linux强制获得锁,Linux中的两种文件锁——协同锁与强制锁相关推荐

  1. link linux 跨设备,Linux中的两种link方式

    Linux系统中包括两种链接方式:硬链接(hard link)和符号链接(symbolic link),其中符合链接就是所谓的软链接(soft link),那么两者之间到底有什么区别呢? inode ...

  2. Linux中的两种守护进程stand alone和xinetd

    Linux中的两种守护进程stand alone和xinetd --http://www.cnblogs.com/itech/archive/2010/12/27/1914846.html#top 一 ...

  3. 在Linux命令行发送电子邮件附件的两种方法

    需 求 本文使用Centos7操作系统. 需要有一个工作正常的邮件系统.本文将不介绍如何配置邮件服务器. 1.使用mail命令 安装mailx安装包 [root@localhost ~]# yum - ...

  4. linux显示器分屏显示命令,在Linux 命令行终端分屏的两种工具

    下面介绍两种终端分屏工具:screen和tmux 一.使用screen分屏(只能上下分屏,不能左右分屏) (1)安装工具 在ubuntu系统中使用sudo apt-get install screen ...

  5. java类型转换答案,在java中支持两种类型的类型转换,自动类型转换和强制类型转换。父类转化为子类需要强制转换。...

    在java中支持两种类型的类型转换,自动类型转换和强制类型转换.父类转化为子类需要强制转换. 更多相关问题 计算机病毒通过()传染扩散得极快,危害最大. 当一个现象的数量由小变大,另一个现象的数量相反 ...

  6. linux系统下重启网络服务的两种方法

    linux系统下重启网络服务的两种方法 发布时间:2020-04-02 11:25:25 来源:亿速云 阅读:207 作者:小新 今天小编给大家分享的是linux系统下重启网络服务的两种方法,很多人都 ...

  7. c语言 linux系统 delay,Linux下实现秒级定时任务的两种方案

    Linux下实现秒级定时任务的两种方案(Crontab 每秒运行): 第一种方案,当然是写一个后台运行的脚本一直循环,然后每次循环sleep一段时间. while true ;do command s ...

  8. linux 操作系统root账号被锁定的两种解决方法

    linux 操作系统root账号被锁定的两种解决方法 参考文章: (1)linux 操作系统root账号被锁定的两种解决方法 (2)https://www.cnblogs.com/redhatlinu ...

  9. mysql临时表_MySQL中的两种临时表

    目录: MySQL 临时表在我们需要保存一些临时数据时是非常有用的.临时表只在当前连接可见,当关闭连接时,MySQL会自动删除表并释放所有空间. 使用其他MySQL客户端程序连接MySQL数据库服务器 ...

  10. 批量插入数据库语句java_java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码)...

    java相关:MyBatis批量插入数据到Oracle数据库中的两种方式(实例代码) 发布于 2020-7-22| 复制链接 本文通过实例代码给大家分享了MyBatis批量插入数据到Oracle数据库 ...

最新文章

  1. CentOS7 service network start命令启动时报错解决方法
  2. eslint不报错 vue_2-2【微信小程序全栈开发课程】index页面搭建--ESlint格式错误
  3. php如何使用正则表达式,php如何使用正则表达式实现替换
  4. Python函数式编程指南(一):概述
  5. sql 缓冲池_监视SQL Server中的内存文员和缓冲池分配
  6. ABI (应用程序二进制接口)
  7. linux安装python3.7
  8. springMVC实现的crud操作
  9. void value not ignored as it ought to be
  10. 深入解析互联网协议的原理
  11. 吉他基本功练习原理及方法
  12. 15种不用花钱就能放生的方法,你知道吗?
  13. 【docker】Mac下oracle10g下载安装
  14. Scikit learn:machine learning in Python之贝叶斯学习
  15. 树莓派 3b jupyter notebook 设置为后台服务
  16. DCM: 中间件家族迎来新成员
  17. mysql md5 多少位_mysql的MD5加密后的字符能不能设定长度
  18. 官方FL Studio 21已经来啦,FL 20.99.8中文版2023最新版
  19. 固态硬盘的计算机需要进行磁盘碎片整理吗,固态硬盘需要整理磁盘碎片吗?
  20. OpenGL ES之GLSL实现“瘦身大长腿”美颜滤镜效果

热门文章

  1. Android Q Labs| Android Q 分区存储
  2. Widget Factory
  3. Webpack入门教程三十
  4. OpenShift免费空间绑定顶级域名(图文教程)
  5. 我读Code Complete 2 —— 第一章
  6. [MSN谈话]专注、口碑和猎头
  7. 我的计时软件TimeDogV13
  8. 集腋成裘-13-git使用-02进阶篇
  9. 读取GY-951模块数据(Linux)
  10. 重新复习基础草稿:迭代器的使用