#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);
}
}
}
};