虽然标题提到了文件,但不一定是文件。任何锁定机制都可以。
情况是这样的:我有一个用 C 编写的守护进程和一个用 php 编写的网页。我想有一种相互锁定的方式,这样在某些情况下,C 守护进程会锁定一个文件,php 检测到这种情况并告诉客户端系统正忙。
有没有简单的方法来做到这一点?
谢谢,
最佳答案
flock
做得好。
在您的 PHP 脚本中,使用非阻塞锁:
$fd = fopen('/var/run/lock.file', 'r+');
if (!flock($fd, LOCK_SH | LOCK_NB, $wouldblock) && $wouldblock) {
// buzy
}
LOCK_NB 标志使这个调用成为非阻塞的。如果文件被独占锁定,它将立即返回。将允许多个页面同时锁定文件。
你可以释放锁
flock($fd, LOCK_UN);
在您的 C 守护程序中,使用阻塞和排他锁:
flock(fd, LOCK_EX); // This will wait until no page has locked the file
关于php - C和php之间的锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796266/