xref: /csrg-svn/lib/libc/gen/daemon.c (revision 44570)
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*44570Smarc static char sccsid[] = "@(#)daemon.c	5.2 (Berkeley) 06/29/90";
1043103Smarc #endif /* LIBC_SCCS and not lint */
1143103Smarc 
1243103Smarc #include <sys/file.h>
1343103Smarc 
14*44570Smarc daemon(nochdir, noclose)
15*44570Smarc 	int nochdir, noclose;
1643103Smarc {
1743103Smarc 	int cpid;
1843103Smarc 
1943103Smarc 	if ((cpid = fork()) == -1)
2043103Smarc 		return (-1);
2143103Smarc 	if (cpid)
2243103Smarc 		exit(0);
23*44570Smarc 	(void) setsid();
24*44570Smarc 	if (!nochdir)
25*44570Smarc 		(void) chdir("/");
26*44570Smarc 	if (!noclose) {
27*44570Smarc 		int devnull = open("/dev/null", O_RDWR, 0);
2843103Smarc 
29*44570Smarc 		if (devnull != -1) {
30*44570Smarc 			(void) dup2(devnull, 0);
31*44570Smarc 			(void) dup2(devnull, 1);
32*44570Smarc 			(void) dup2(devnull, 2);
33*44570Smarc 			if (devnull > 2)
34*44570Smarc 				(void) close(devnull);
35*44570Smarc 		}
36*44570Smarc 	}
3743103Smarc }
38