php - C和php之间的锁定文件

标签 php c locking mutual-exclusion

虽然标题提到了文件,但不一定是文件。任何锁定机制都可以。

情况是这样的:我有一个用 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 的 flock()文档和 C 的 one

关于php - C和php之间的锁定文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4796266/

相关文章:

ios - Apple Mach-O 链接器错误 - GameCenter

c - 如何在 C 中获取文件的大小?

php - 通过 php 锁定 mysql 行

linux - 无法以非 root 用户身份聚集

php - Mysql 将数据存储为数组

php - 用 php 计算字符串中大写字母的最简单、最短的方法?

php - 如何从 mysql 数据库中解码一行并对其进行编码

php - 文件获取内容(https ://url) fails

c - 在 Arduino 上经过一定时间后执行事情

c++:互斥、守卫和函数调用