强制锁与建议锁概念,这里就不描述了,可以查相关资料。
强制锁要生效经过必要三步:
1.允许文件系统强制锁生效。(默认不生效)
2.对于文件系统上需加锁文件,改变其组的权限(取消组中可执行权限,增加设置组id)。
3.对于文件系统上需加锁文件,进行加锁。
下面是测试程序:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
int test_lock(int fd, short whence, off_t offset, off_t len)
{
int ret;
struct flock wlock;
wlock.l_type = F_WRLCK;
wlock.l_whence = whence;
wlock.l_start = offset;
wlock.l_len = len;
ret = fcntl(fd, F_SETLK, &wlock);
return ret;
}
int main(int argc, char *argv[])
{
int fd;
//Notice :permission and "zero"
if((fd = open("./test", O_WRONLY|O_CREAT, 02640)) < 0) {
return -1;
pause();
return 0;
}
测试过程:
1.编译test_w.c
gcc test_w.c -o test_w
2.重新挂载需要加锁的文件所在文件系统。
mount -o remount,mand /
3.运行程序
#./test_w &
[1] 6954
#echo "aaaa" >test
bash: test: 资源暂时不可用
#kill %1 -9
5.重新挂载需要加锁的文件所在文件系统。
mount -o remount /
6.运行程序
#./test_w &
[1] 6958
#echo "cccc" >test
#cat test
cccc
可见强制锁失效,这种情况可称之为建议锁
强制锁要生效经过必要三步:
1.允许文件系统强制锁生效。(默认不生效)
2.对于文件系统上需加锁文件,改变其组的权限(取消组中可执行权限,增加设置组id)。
3.对于文件系统上需加锁文件,进行加锁。
下面是测试程序:
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdlib.h>
#include <stdio.h>
int test_lock(int fd, short whence, off_t offset, off_t len)
{
int ret;
struct flock wlock;
wlock.l_type = F_WRLCK;
wlock.l_whence = whence;
wlock.l_start = offset;
wlock.l_len = len;
ret = fcntl(fd, F_SETLK, &wlock);
return ret;
}
int main(int argc, char *argv[])
{
int fd;
//Notice :permission and "zero"
if((fd = open("./test", O_WRONLY|O_CREAT, 02640)) < 0) {
return -1;
}
// Lock the whole file
pause();
return 0;
}
测试过程:
1.编译test_w.c
gcc test_w.c -o test_w
2.重新挂载需要加锁的文件所在文件系统。
mount -o remount,mand /
3.运行程序
#./test_w &
[1] 6954
#echo "aaaa" >test
bash: test: 资源暂时不可用
可见强制锁生效。
4.杀死测试程序#kill %1 -9
5.重新挂载需要加锁的文件所在文件系统。
mount -o remount /
6.运行程序
#./test_w &
[1] 6958
#echo "cccc" >test
#cat test
cccc
可见强制锁失效,这种情况可称之为建议锁