革命先辈的故事Linux⽂件锁flock
Linux⽂件锁flock
在多个进程同时操作同⼀份⽂件的过程中,很容易导致⽂件中的数据混乱,需要锁操作来保证数据的完整性,这⾥介绍的针对⽂件的锁,称之为“⽂件锁”-flock。
flock,建议性锁,不具备强制性。⼀个进程使⽤flock将⽂件锁住,另⼀个进程可以直接操作正在被锁的⽂件,修改⽂件中的数据,原因在于flock只是⽤于检测⽂件是否被加锁,针对⽂件已经被加锁,另⼀个进程写⼊数据的情况,内核不会阻⽌这个进程的写⼊操作,也就是建议性锁的内核处理策略。
flock主要三种操作类型:
LOCK_SH,共享锁,多个进程可以使⽤同⼀把锁,常被⽤作读共享锁;
LOCK_EX,排他锁,同时只允许⼀个进程使⽤,常被⽤作写锁;
LOCK_UN,释放锁;
进程使⽤flock尝试锁⽂件时,如果⽂件已经被其他进程锁住,进程会被阻塞直到锁被释放掉,或者在调
⽤flock的时候,采⽤LOCK_NB参数,在尝试锁住该⽂件的时候,发现已经被其他服务锁住,会返回错误,errno错误码为EWOULDBLOCK。即提供两种⼯作模式:阻塞与⾮阻塞类型。
服务会阻塞等待直到锁被释放:
flock(lockfd,LOCK_EX)
网络教育研究
服务会返回错误发现⽂件已经被锁住时:
ret = flock(lockfd,LOCK_EX|LOCK_NB)吃什么防辐射
同时ret = -1, errno = EWOULDBLOCK
flock锁的释放⾮常具有特⾊,即可调⽤LOCK_UN参数来释放⽂件锁,也可以通过关闭fd的⽅式来释放⽂件锁(flock的第⼀个参数是fd),意味着flock会随着进程的关闭⽽被⾃动释放掉。
包饺子步骤flock其中的⼀个使⽤场景为:检测进程是否已经存在;
int checkexit(char* pfile)
每日清晨{风筝的英文怎么读
if (pfile == NULL)
{
return -1;
}
int lockfd = open(pfile,O_RDWR);
if (lockfd == -1)
{
return -2;
让爱传出去}
校园网怎么破解int iret = flock(lockfd,LOCK_EX|LOCK_NB);
if (iret == -1)
{
return -3;
}
return0;
}