home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / unix / volume26 / munetd / daemon.c next >
C/C++ Source or Header  |  1992-05-08  |  2KB  |  50 lines

  1. /*-
  2.  * Copyright (c) 1990 The Regents of the University of California.
  3.  * All rights reserved.
  4.  *
  5.  * Redistribution and use in source and binary forms are permitted provided
  6.  * that: (1) source distributions retain this entire copyright notice and
  7.  * comment, and (2) distributions including binaries display the following
  8.  * acknowledgement:  ``This product includes software developed by the
  9.  * University of California, Berkeley and its contributors'' in the
  10.  * documentation or other materials provided with the distribution and in
  11.  * all advertising materials mentioning features or use of this software.
  12.  * Neither the name of the University nor the names of its contributors may
  13.  * be used to endorse or promote products derived from this software without
  14.  * specific prior written permission.
  15.  * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED
  16.  * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF
  17.  * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
  18.  */
  19.  
  20. #if defined(LIBC_SCCS) && !defined(lint)
  21. static char sccsid[] = "@(#)daemon.c    1.2 (Berkeley) 6/29/90";
  22. #endif /* LIBC_SCCS and not lint */
  23.  
  24. #include <sys/file.h>
  25.  
  26. daemon(nochdir, noclose)
  27.     int nochdir, noclose;
  28. {
  29.     int cpid;
  30.  
  31.     if ((cpid = fork()) == -1)
  32.         return (-1);
  33.     if (cpid)
  34.         exit(0);
  35.     (void) setsid();
  36.     if (!nochdir)
  37.         (void) chdir("/");
  38.     if (!noclose) {
  39.         int devnull = open("/dev/null", O_RDWR, 0);
  40.  
  41.         if (devnull != -1) {
  42.             (void) dup2(devnull, 0);
  43.             (void) dup2(devnull, 1);
  44.             (void) dup2(devnull, 2);
  45.             if (devnull > 2)
  46.                 (void) close(devnull);
  47.         }
  48.     }
  49. }
  50.