一、概念:一个程序在系统中只能启动一个实例,这样的程序称为单实例应用程序。例如Windows下的任务管理器、回收站、播放器、文件系统等等。
二、实现思想与方法:
(1)核心思想:在当前系统中,只需要有能表示程序是否启动的标志,那么就可以利用它来实现单实例应用程序。
(2)具体步骤:每当程序启动的时候,都需要先检测这个启动标志,当标志指示已经有实例存在,则当前程序退出,否则把标志置位,再运行业务。
(3)实现单实例应用程序的方法:共享内存、绑定端口、命名管道、文件锁等等。
三、实现案例:运用文件锁实现
代码转载:http://www.cnblogs.com/highway-9/p/5517990.html
1 /************************************************ 2 * 该例程讲解Linux下程序只运行一个实例的编程实现 3 * 4 * 编写只运行一个实例的程序有很多种方式,比如通过管道 5 * 共享内存、文件锁等,主要是要有一个全局flag标志该程序 6 * 已经在运行了,本程序使用文件锁来实现单实例 7 ************************************************/ 8 #include <unistd.h> 9 #include <fcntl.h> 10 #include <sys/stat.h> 11 #include <sys/types.h> 12 #include <errno.h> 13 #include <stdio.h> 14 #include <stdlib.h> 15 #include <string.h> 16 #include <string> 17 18 #ifndef PATH_MAX 19 #define PATH_MAX 1024 // 默认最大路径长度 20 #endif 21 22 std::string currentExeName() 23 { 24 char buf[PATH_MAX] = { '