首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 操作系统 > UNIXLINUX >

fcntl的一个疑问解决办法

2012-03-22 
fcntl的一个疑问使用fcntl加上F_WRLCK锁,struct flock locklock.l_type F_WRLCKlock.l_whence SEEK_

fcntl的一个疑问
使用fcntl加上F_WRLCK锁,

struct flock lock;

lock.l_type = F_WRLCK;

lock.l_whence = SEEK_SET;

lock.l_start = 0;

lock.l_len = 0;

if(fcntl(fd,F_SETLK,&lock) == -1)

{

perror("fcntl");

return -1;

}

两个进程都写文件,在锁还没释放时,有一个进程会输出fcntl: Resource temporarily unavailable

但是,如果进程里检测到有锁时不停止写入,即继续写入,貌似仍然可以真的写入东西到文件,覆盖掉另外一个进程写入的内容。

这个锁难道只是做做样子?不是内核里面锁住的?不知道我的这个想法有没有错误?

[解决办法]
楼主可以百度一下: 强制性记录锁.
[解决办法]

这种文件锁属于劝告性锁:

调用fcntl(fd,F_SETLK,&lock)时如果该锁无法被调用者所在进程持有,该函数只返回错误并不阻塞;
如果是fcntl(fd,F_SETLKW,&lock)则阻塞等待获取锁,F_SETLKW中的W表示阻塞等待持有锁;

所以并不是做样子,就是这样的一种机制.

热点排行