======================== C Concurrency cheatsheet ======================== .. contents:: Table of Contents :backlinks: none How to write a UNIX daemon -------------------------- .. code-block:: c #include #include #include #include #include int main(int argc, char *argv[]) { int ret = -1; pid_t pid; /* become daemon */ pid = fork(); if (-1 == pid) { printf("Fork get error\n"); goto Error; } else if (pid != 0) { ret = 0; goto Error; } /* Change the file mode mask */ umask(0); /* set sid */ if (-1 == setsid()) { printf("set sid failed\n"); goto Error; } /* chdir to root "/" */ if (-1 == chdir("/")) { printf("chdir(\"/\") failed\n"); goto Error; } /* close stdin, stdout, stderr */ close(STDIN_FILENO); close(STDOUT_FILENO); close(STDERR_FILENO); /* Do some task here */ while (1) { sleep(3); syslog(LOG_ERR, "Hello"); } ret = 0; Error: return ret; } Using ``daemon(nochdir, noclose)`` ---------------------------------- .. code-block:: c #include #include #include int main(int argc, char *argv[]) { int ret = -1; /* make process as a daemon */ if (-1 == daemon(0, 0)) { syslog(LOG_ERR, "create a daemon get error"); goto Error; } /* do the daemon task */ while(1) { sleep(3); syslog(LOG_ERR, "Hello"); } ret = 0; Error: return ret; }