Russian Qt Forum
Ноябрь 23, 2024, 00:04 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ограничение запуска приложения одной копией  (Прочитано 6818 раз)
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
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #1 : Февраль 23, 2006, 22:22 »

на линуксе создают pid файлы! причем обработка этого ложится на пользователя
Записан
NWhisper
Гость
« Ответ #2 : Февраль 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;
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.047 секунд. Запросов: 23.