diff --git a/app/scantool/main.cpp b/app/scantool/main.cpp index 211af869..6b6449be 100644 --- a/app/scantool/main.cpp +++ b/app/scantool/main.cpp @@ -2,6 +2,14 @@ #include #include "base/HGDef.h" #include +#include + +#if !defined (HG_CMP_MSC) +#include +#include +#include +#endif + #include "log/log.h" HLOG g_hLog = nullptr; @@ -37,6 +45,25 @@ int main(int argc, char *argv[]) CloseHandle(hMutex); return -1; } +#else + const QString lockFilePath = "/tmp/HGScanTool.lock"; + QFile lockFile(lockFilePath); + + if (!lockFile.open(QIODevice::ReadWrite | QIODevice::Unbuffered)) + { + return 0; + } + int fd = lockFile.handle(); + struct flock lock; + lock.l_type = F_WRLCK; + lock.l_whence = SEEK_SET; + lock.l_start = 0; + lock.l_len = 0; + if (fcntl(fd, F_SETLK, &lock) == -1) + { + lockFile.close(); + return 0; + } #endif QTranslator translator_qt; @@ -55,6 +82,10 @@ int main(int argc, char *argv[]) #ifdef HG_CMP_MSC CloseHandle(hMutex); +#else + lock.l_type = F_UNLCK; + fcntl(fd, F_SETLK, &lock); + lockFile.close(); #endif return ret; }