关于fcntl 文件锁的用法的疑问

林晓海 2013-06-25 02:24:41
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
void Getlock_state(int fd,long start, long len)
{
struct flock lock;
lock.l_whence=SEEK_SET;
lock.l_start=start;
lock.l_len=len;
lock.l_type=F_WRLCK;
//lock.l_pid=getpid();
printf("%d\n",fcntl(fd,F_GETLK,&lock));
if(lock.l_type==F_RDLCK)
{
printf("The (%ld-%ld) range content lock type is:RDLOCK\n",start,start+len);
}
else if(lock.l_type==F_WRLCK)
{
printf("The (%ld-%ld) range content lock type is:WRLOCK\n",start,start+len);
}
else if(lock.l_type==F_UNLCK)
{
printf("The (%ld-%ld) range content is free of lock\n",start,start+len);
}
else
{
printf("unknown lock type!\n");
}
}
void Lock_content(int fd,int lock_Type,long start,long len)
{
struct flock lock;
lock.l_type=lock_Type;
lock.l_whence=SEEK_SET;
lock.l_start=start;
lock.l_len=len;
//lock.l_pid=getpid();
printf("%d\n",fcntl(fd,F_SETLKW,&lock));
printf("lock (%ld-%ld) range\n",start,start+len);
}
void Unlock_content(int fd,long start,long len)
{
struct flock lock;
lock.l_type=F_UNLCK;
lock.l_whence=SEEK_SET;
lock.l_start=start;
lock.l_len=len;
//lock.l_pid=getpid();
printf("%d\n",fcntl(fd,F_SETLKW,&lock));
printf("free of lock (%ld-%ld) range\n",start,start+len);
}
int main(int argc,char *argv[])
{
int fd;
if((fd=open("./testfcntllock",O_CREAT|O_RDWR,0755))==-1)
{
perror("open error!\n");
exit(EXIT_FAILURE);
}
char *ptr="This is the test content!\n";
Lock_content(fd,F_WRLCK,0,strlen(ptr)-10);
Getlock_state(fd,0,strlen(ptr)-10);
write(fd,ptr,strlen(ptr));
Unlock_content(fd,0,strlen(ptr)-10);
Getlock_state(fd,0,strlen(ptr)-10);
Lock_content(fd,F_RDLCK,0,strlen(ptr)-10);
Getlock_state(fd,0,strlen(ptr)-10);
return 0;
}

为什么运行结果是下面的:都是提示没有上锁啊??
0
lock (0-16) range
0
The (0-16) range content is free of lock
0
free of lock (0-16) range
0
The (0-16) range content is free of lock
0
lock (0-16) range
0
The (0-16) range content is free of lock
...全文
43 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

69,382

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧