/*
	Daemon App Example for Solaris
	WindyHana's Solanara: Daemonize http://www.solanara.net/solanara/daemon
	cc -o daemon daemon.c
*/
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <stropts.h>
#include <fcntl.h>
#include <termio.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <signal.h>

void signalhandler(int sig)
{
	switch(sig) {
	case SIGHUP:
		break;
	}
}

int main(int argc, char* argv[]) {
	int pid;
	int devttyfd;

	if ((pid = fork()) < 0) {
		perror("Cannot Fork!\n");
		_exit(0);
	}
	if (pid > 0) {
		_exit(0);
	}

	setpgrp(); // reset process group id

	// redirect stdin, stdout, stderr to /dev/null. You can redirect to regular file.
	freopen("/dev/null", "r", stdin);
	freopen("/dev/null", "w", stdout);
	freopen("/dev/null", "w", stderr);

	// reset TTY
	if ((devttyfd = open("/dev/tty", O_WRONLY)) < 0) {
		; // cannot open tty. do nothing.
	} else {
		(void) ioctl(devttyfd, TIOCNOTTY, (char *) 0);
		(void) close(devttyfd);
	}

	signal(SIGHUP, signalhandler); // set signal for SIGHUP

	while (1) {
		sleep(10); // start daemon.
	}
}

