lock file between C and php

空扰寡人 提交于 2019-12-23 01:57:08

问题


Although the title mentions file, it doesn't have to be a file. Any locking mechanism would do.

Here is the situation: I have a daemon process written in C, and a web page in php. I'd like to have a way of mutual locking so that under certain situation, the C daemon would lock a file and php detects the situation and tells the client side that the system is busy.

Is there an easy way of doing this?

Thanks,


回答1:


flock does it properly.

In your PHP script, use a non-blocking lock:

$fd = fopen('/var/run/lock.file', 'r+');
if (!flock($fd, LOCK_SH | LOCK_NB, $wouldblock) && $wouldblock) {
    // buzy
}

The LOCK_NB flag make this call non blocking. If the file is locked exclusively, it will return immediately. Multiple pages will be allowed to lock the file at the same time.

You can release the lock with

flock($fd, LOCK_UN);

In your C daemon, use a blocking and exclusive lock:

flock(fd, LOCK_EX); // This will wait until no page has locked the file

See PHP's flock() documentation and C's one




回答2:


You could have your daemon create a file when busy, and remove it when not, then in PHP do something like:

if (file_exists('/path/to/file')) {
    echo 'System busy';
}



回答3:


If your PHP application is database driven, it should be easy to update a certain column of that database to indicate "the system is busy".

Your cronjob would set and reset this flag and your PHP application can read its value.




回答4:


Do you only want PHP to detect that the daemon is busy? Or do you actually want them to wait on each other? Using an exclusive lock would have the downside that the C daemon will have to wait for any and all PHP instances to finish their work before it can grab its lock and continue on.

If you're only looking to detect that the C daemon is busy (ie, only in one direction), just testing for the existance of a busy token file (or semaphore, or shared memory object - platform dependant) might be a better option. Creating files tends to be more expensive than just setting a simple flag in shared memory however.



来源:https://stackoverflow.com/questions/4796266/lock-file-between-c-and-php

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!