Exemplo n.º 1
0
bool
check_lock_file(const char *username)
{
     bool ok;
     char lock_file[PLF_MAX];
     time_t time_now, time_file;
     struct stat st_buf;

     snprintf(lock_file, PLF_MAX, "%s-%s", LOCK_FILE, username);

     if (stat (lock_file, &st_buf) < 0)
	  ok = false;
     else {
	  time_file = st_buf.st_ctime;
	  time_now = time(NULL);

	  if (difftime(time_now, time_file) > (double)TIMEOUT_FILE) {
	       ok = false;
	       remove_lock_file(lock_file);
	  } else
     	       ok = true;
     }

     return ok;
}
Exemplo n.º 2
0
void quit() {
	debug("GtkShot has exit" \
			", you will not get shot image any more...\n");

	remove_lock_file();
	gtk_main_quit();
	exit(0);
}
Exemplo n.º 3
0
int main(int argc, char *argv[]) {
#ifdef ENABLE_NLS
	bindtextdomain(GETTEXT_PACKAGE, PACKAGE_LOCALE_DIR);
	bind_textdomain_codeset(GETTEXT_PACKAGE, "UTF-8");
	textdomain(GETTEXT_PACKAGE);
#endif

	gint pid = new_lock_file();

	if (pid > 0) {
		if (kill(pid, WAKE_UP_SIGNAL) == 0) {
			exit(0); // 进程确已存在,则退出新进程
		} else { // 否则,重新创建锁定文件
			remove_lock_file();
			new_lock_file();
		}
	}
	signal(WAKE_UP_SIGNAL, wake_up);
	signal(SIGINT, exit_clean);

	gtk_init(&argc, &argv);

	shot = gtk_shot_new();
	shot->quit = quit;
	shot->dblclick = save_to_clipboard;

	gtk_window_set_title(GTK_WINDOW(shot), GTK_SHOT_NAME);
	GdkPixbuf *icon = gdk_pixbuf_new_from_xpm_data((const char**)gtkshot_xpm);
	gtk_window_set_icon(GTK_WINDOW(shot), icon);
	g_object_unref(icon);

	gtk_shot_show(shot, TRUE);
	gtk_main();

	return 0;
}
Exemplo n.º 4
0
static void remove_lock_file_on_signal(int signo)
{
	remove_lock_file();
	signal(signo, SIG_DFL);
	raise(signo);
}
Exemplo n.º 5
0
static void remove_lock_file_on_signal(int signo)
{
	remove_lock_file();
	sigchain_pop(signo);
	raise(signo);
}