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表示阻塞等待持有锁;
所以并不是做样子,就是这样的一种机制.