- 论坛徽章:
- 1
|
以下是fcntl函数使用的一个例子,大概的过程为:首先给flock结构体的对应位赋予相应的值。接着使用两次fcntl函数分别用于给相关文件上锁和判断文件是否可以上锁。
本人疑惑点有:
1、对于函数中的while 语句用在这里不是很理解,如果调用该函数时不会一直循环在这里?
2、给文件上锁有什么用处?看书本不是很理解,希望朋友能用通俗、形象一点的表述帮忙解答,十分感谢!
/*lock_set函数*/
void lock_set(int fd, int type)
{
struct flock lock;
lock.l_whence = SEEK_SET;//赋值lock结构体
lock.l_start = 0;
lock.l_len =0;
while(1){
lock.l_type = type;
/*根据不同的type值给文件上锁或解锁*/
if((fcntl(fd, F_SETLK, &lock)) == 0){
if( lock.l_type == F_RDLCK )
printf("read lock set by %d\n",getpid());
else if( lock.l_type == F_WRLCK )
printf("write lock set by %d\n",getpid());
else if( lock.l_type == F_UNLCK )
printf("release lock by %d\n",getpid());
return;
}
/*判断文件是否可以上锁*/
fcntl(fd, F_GETLK,&lock);
/*判断文件不能上锁的原因*/
if(lock.l_type != F_UNLCK){
/*/该文件已有写入锁*/
if( lock.l_type == F_RDLCK )
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);
getchar();
}
}
} |
|