Ограничение запуска приложения одной копией
NWhisper 23 февраля, 2006 - 15:55
В 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?
»
- Для комментирования войдите или зарегистрируйтесь

mutex он и в Африке mutex
man pthread_mutex_init
Также для этих целей можно использовать семафоры... только нужно ли это(огрничение) во многопользовательской среде?
Оно даже в
Оно даже в однопользовательской сильно мешает. Самые божественно кривые вещи - это приложения под КПК, где почти все программы запускаются в единственном экземпляре и открывают единственный файл. Так хорошо переносить данные из одного текстовика в другой или лазить по инету, когда надо постоянно открывать и закрывать страницы. Что-то можно обойти, но все равно неприятно.
Re: mutex он и в Африке mutex
pthread_mutex_t, pthread_mutex_init, pthread_mutex_lock и пр. не годятся, так как они работают только внутри одного многопоточного процесса. Они не являются глобальными для сеанса пользователя.
Другими словами, созданный экземпляр pthread_mutex_t одного приложения не видно из другого.
Насколько я
Насколько я помню это делается при помощи файловой системы. Создаются специальный файлы. Кажется нечто вроде этого:
http://linuxcommand.org/man_pages/lockfile1.html
Всем спасибо! Я
Всем спасибо! Я нашел решение...
#include <sys/ipc.h> #include <sys/sem.h> #include <sys/types.h> int main(int argc, char *argv[]) { key_t sem_key = 12345678; 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; }