#include <fcntl.h>#include <stdlib.h>#include <unistd.h>class Daemon {public:Daemon(bool changeDir = false, bool closeStd = true) {int fd;if (fork() != 0) {exit(0);}setsid();if (changeDir) {chdir("/");}if (closeStd && (fd = open("/dev/null", O_RDWR, 0)) != -1) {dup2(fd, STDIN_FILENO);dup2(fd, STDOUT_FILENO);dup2(fd, STDERR_FILENO);if (fd > STDERR_FILENO) {close(fd);}}}};
