printf("Read lock already set by %d\n",lock.l_pid);
}
else if(lock.l_type==F_WRLCK) /*该文件已经有写入锁 */
{
printf("Write lock already set by %d\n",lock.l_pid);
}
}
/*l_type 可能在执行完上述判断后被修改了*/
lock.l_type=type;
/*根据不同的type值进行阻塞式上锁或解锁*/
if((fcntl(fd,F_SETLKW,&lock))<0)
{
printf("Lock failed:type=%d\n",lock.l_type);
return 1;
}
switch(lock.l_type)
{
case F_RDLCK:
{
printf("Read lock set by %d\n",getpid());/*getpid()用来得到当前的进程号*/
}
break;
case F_WRLCK:
{
printf("Write lock set by %d\n",getpid());
}
break;
case F_UNLCK:
{
printf("Release lock set by %d\n",getpid());
return 1;
}
break;
default:break;
} /*end of switch*/
return 0;
}! h _" g; r/ _4 f* K" V! y
1 O" P3 D* i Z$ o
" _* o! h# v, I: e 5 m( u. r+ t" C' K F8 A, K# N 下面的代码是文件写入锁的测试用例,这里首先创建一个hello.c文件,然后对其上锁,最后释放写入锁。代码如下所示:, v' J, \( Q9 p- y: v
" P9 w/ ?/ r9 \" f* u2 x
% m% ]6 f) p, X5 D: W* D( \+ K
+ u: |7 f& f8 c5 ~% U