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