一、基于APR
bool check_lock_file()
{
apr_status_t rv;
apr_file_t *fp;
char fname[20] = "./processlock.ini";//文件锁文件
if ((rv = apr_file_open(&fp, fname, APR_WRITE|APR_CREATE, APR_OS_DEFAULT, mp)) != APR_SUCCESS)//打开失败(如果该文件不存在则先创建,打开方式默认,内存池mp)
{
return FALSE;
}
rv = apr_file_lock(fp, APR_FLOCK_EXCLUSIVE | APR_FLOCK_NONBLOCK);//给文件上锁------------------一个文件不能同时上两把锁
if (rv != APR_SUCCESS)
{
LOG4CXX_INFO(logger1,"Lock file Error! Another process is running!");//日志文件
return FALSE;
}
return TRUE;
}
二、基于winapi的
HANDLE hMutex = CreateMutex(NULL, FALSE, LPCTSTR("Mutex_Only_One_Instance_Allowed"));//创建互斥题
if (NULL == hMutex)//创建失败
{