Russian Qt Forum

Программирование => С/C++ => Тема начата: NWhisper от Февраль 23, 2006, 16:20



Название: Ограничение запуска приложения одной копией
Отправлено: NWhisper от Февраль 23, 2006, 16:20
В Windows на C++ можно ограничить запуск приложения одной копией следующим образом:
Код:

#include <windows.h>

int main(int argc, char *argv[])
{
    HANDLE mutex;
    WCHAR *mtxname = L"MyMutexName";
    if (OpenMutex(MUTEX_ALL_ACCESS, false, mtxname) != 0)
        return -1;
    else
        mutex = CreateMutex(null, false, mtxname);

    // Тело приложения

    ReleaseMutex(mutex);
    return 0;
}

А как такое же можно провернуть в Linux?


Название: Ограничение запуска приложения одной копией
Отправлено: Admin от Февраль 23, 2006, 22:22
на линуксе создают pid файлы! причем обработка этого ложится на пользователя


Название: Ограничение запуска приложения одной копией
Отправлено: NWhisper от Февраль 24, 2006, 17:12
Всем спасибо! Я нашел решение...
Код:

#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/types.h>

int main(int argc, char *argv[])
{
  key_t sem_key = 14354733;
  int sem_id;
  union senum
  {
    int val;
    struct semid_ds *buf;
    unsigned short int *array;
    struct seminfo *__buf;
  };

  if ((sem_id = semget(sek_key, 1, 0644 | IPC_CREAT | IPC_EXCL)) < 0)
    return -1;

  //  Тело приложения

  union senum ignored_argument;
  semctl(sem_id, 1, IPC_RMID, ignored_argument);
  return 0;
}