|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
开发linux发行版的人都是通读过linux内核代码,对linux原理极其精通的人。
1、概述
Linux供应了多种特征来完成文件锁定。个中最复杂的办法就是以原子操纵的体例创立锁文件,所谓“原子操纵”就是在创立锁文件时,体系将不同意任何别的的事变产生。
这就给程序供应了一种确保它所创立的文件是独一性的体例,且该文件不成能被别的程序在统一时候创立。
2、办法
锁文件仅仅是充任一个唆使器的脚色,程序间必要经由过程互相合作来利用它们。锁文件只是倡议性锁,与此对峙的是强迫性锁。
为创立一个用作唆使器的文件,我们利用带O_CREATE和O_EXCL标记的open体系挪用。这将使我们以一个原子操纵同时完成两项事情:断定文件不存在,然后创立它。
3、完成
以下为援用的内容:
//file:lock.c
#include
#include
#include
#include
#include
intmain()
{
intfile_desc;
intsave_errno;
file_desc=open("/tmp/LockFile.test",O_RDWR|O_CREAT|O_EXCL,0444);
if(file_desc<0)
{
save_errno=errno;
printf("Openfailedwitherroris%dn",save_errno);
}
else{
printf("Opensucceededn");
}
exit(EXIT_SUCCESS);
}
第一次运转程序:
$lock
输入以下:
Opensucceeded
我们再次运转程序:
$lock
输入以下:
Openfailedwitherroris17
剖析:
第一次运转程序时,因为文件其实不存在,以是实行乐成。关于后续的实行,由于文件已存在而失利了。若想程序再次实行乐成,必需删除锁文件。
在Linux体系中,一般毛病号码17代表的是EEXIST,此毛病用以暗示一个文件已存在。毛病号界说在头文件errno.h或(更罕见的)它所包括的头文件中
</p>
系统安全相关命令:passwd、su、umask、chgrp、chmod、chown、chattr、sudo、pswho |
|