windows
/*return legal on true, false on illegal */
bool LockFileStatusLegal(const char *filename)
{
assert(filename != NULL);
int len = strlen(filename);
char *tmpname = (char*) malloc(len+7);
strcpy(tmpname, filename);
strcat(tmpname, ".lock");
FILETIME ftLastAccess;
SYSTEMTIME stUTC, stLocal;
LPWIN32_FIND_DATAA fileinfo = new WIN32_FIND_DATAA;
FindClose(FindFirstFileA(tmpname, fileinfo));
ftLastAccess = fileinfo->ftLastAccessTime;
FileTimeToSystemTime(&ftLastAccess, &stUTC);
SystemTimeToTzSpecificLocalTime(NULL, &stUTC, &stLocal);
SYSTEMTIME systime;
GetSystemTime(&systime);
if( (systime.wMinute - stLocal.wMinute) > 5
|| (systime.wMinute - stLocal.wMinute) < -5 )
{
free(tmpname);
delete fileinfo;
return false;
}
free(tmpname);
delete fileinfo;
return true;
}
LINUX
bool LockFileStatusLegal(const char *filename)
{
assert(filename != NULL);
int len = strlen(filename);
char *tmpname = (char*) malloc(len+7);
strcpy(tmpname, filename);
strcat(tmpname, ".lock");
struct stat buf;
int result = 0;
result =stat( tmpname, &buf );
time_t lasttime = buf.st_atime;
time_t now;
time(&now);
if( (now - lasttime) > 300 )
{
free(tmpname);
return false;
}
free(tmpname);
return true;
}