143103Smarc /*- 243103Smarc * Copyright (c) 1990 The Regents of the University of California. 343103Smarc * All rights reserved. 443103Smarc * 543103Smarc * %sccs.include.redist.c% 643103Smarc */ 743103Smarc 843103Smarc #if defined(LIBC_SCCS) && !defined(lint) 9*45846Sbostic static char sccsid[] = "@(#)daemon.c 5.3 (Berkeley) 12/28/90"; 1043103Smarc #endif /* LIBC_SCCS and not lint */ 1143103Smarc 12*45846Sbostic #include <sys/fcntl.h> 13*45846Sbostic #include <unistd.h> 14*45846Sbostic #include <paths.h> 1543103Smarc 1644570Smarc daemon(nochdir, noclose) 1744570Smarc int nochdir, noclose; 1843103Smarc { 1943103Smarc int cpid; 2043103Smarc 2143103Smarc if ((cpid = fork()) == -1) 2243103Smarc return (-1); 2343103Smarc if (cpid) 2443103Smarc exit(0); 2544570Smarc (void) setsid(); 2644570Smarc if (!nochdir) 2744570Smarc (void) chdir("/"); 2844570Smarc if (!noclose) { 29*45846Sbostic int devnull = open(_PATH_DEVNULL, O_RDWR, 0); 3043103Smarc 3144570Smarc if (devnull != -1) { 32*45846Sbostic (void) dup2(devnull, STDIN_FILENO); 33*45846Sbostic (void) dup2(devnull, STDOUT_FILENO); 34*45846Sbostic (void) dup2(devnull, STDERR_FILENO); 3544570Smarc if (devnull > 2) 3644570Smarc (void) close(devnull); 3744570Smarc } 3844570Smarc } 3943103Smarc } 40