68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			68 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #include <stdio.h>
 | |
| #include <stdlib.h>
 | |
| #include <fcntl.h>
 | |
| #include <string.h>
 | |
| #include <sys/file.h>
 | |
| #include <kwrap/semaphore.h>
 | |
| #include <kwrap/flag.h>
 | |
| #include <kwrap/mailbox.h>
 | |
| #include <kwrap/task.h>
 | |
| #include <kwrap/debug.h>
 | |
| #include <kwrap/cmdsys.h>
 | |
| #include "startup.h"
 | |
| 
 | |
| static ID sem_shutdown;
 | |
| 
 | |
| static void app_startup(void *p_param)
 | |
| {
 | |
| 	vos_sem_create(&sem_shutdown, 1, "sem_shutdown");
 | |
| 	vos_sem_wait_interruptible(sem_shutdown); //clear shutdown semaphore
 | |
| 
 | |
| 	// do the first program
 | |
| 	app_main();
 | |
| 
 | |
| 	// wait system trigger shutdown
 | |
| 	vos_sem_wait_interruptible(sem_shutdown);
 | |
| 	vos_sem_destroy(sem_shutdown);
 | |
| }
 | |
| 
 | |
| static int check_if_multiple_instance(char *p_name)
 | |
| {
 | |
| 	char buf[128];
 | |
| 	FILE *pp;
 | |
| 	UINT32 inst_cnt = 0;
 | |
| 
 | |
| 	snprintf(buf, sizeof(buf), "ps", p_name);
 | |
| 	if ((pp = popen(buf, "r")) == NULL) {
 | |
| 		printf("popen() error!\n");
 | |
| 		exit(1);
 | |
| 	}
 | |
| 
 | |
| 	while (fgets(buf, sizeof buf, pp)) {
 | |
| 		if (strstr(buf, p_name) != NULL) {
 | |
| 			inst_cnt ++;
 | |
| 		}
 | |
| 	}
 | |
| 	pclose(pp);
 | |
| 	if (inst_cnt > 1) {
 | |
| 		return 1;
 | |
| 	}
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int main(int argc, char *argv[])
 | |
| {
 | |
| 	if (check_if_multiple_instance(argv[0]) == 1) {
 | |
| 		if (argc > 1) {
 | |
| 			nvt_cmdsys_ipc_cmd(argc, argv);
 | |
| 			return 0;
 | |
| 		}
 | |
| 		printf("%s has already in running. quit.\n");
 | |
| 		return -1;
 | |
| 	}
 | |
| 	vos_mbx_init(16);
 | |
| 	app_startup(NULL);
 | |
| 	// here not be reached.
 | |
| 	return 0;
 | |
| }
 | 
