pid_output.c
上传用户:xiaozhuqw
上传日期:2009-11-15
资源大小:1338k
文件大小:2k
源码类别:

网络

开发平台:

Unix_Linux

  1. /*
  2.  * Process id output.
  3.  * Copyright (C) 1998, 1999 Kunihiro Ishiguro
  4.  *
  5.  * This file is part of GNU Zebra.
  6.  *
  7.  * GNU Zebra is free software; you can redistribute it and/or modify it
  8.  * under the terms of the GNU General Public License as published by the
  9.  * Free Software Foundation; either version 2, or (at your option) any
  10.  * later version.
  11.  *
  12.  * GNU Zebra is distributed in the hope that it will be useful, but
  13.  * WITHOUT ANY WARRANTY; without even the implied warranty of
  14.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  15.  * General Public License for more details.
  16.  *
  17.  * You should have received a copy of the GNU General Public License
  18.  * along with GNU Zebra; see the file COPYING.  If not, write to the Free
  19.  * Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
  20.  * 02111-1307, USA.  
  21.  */
  22. #include <zebra.h>
  23. pid_t
  24. pid_output (char *path)
  25. {
  26.   FILE *fp;
  27.   pid_t pid;
  28.   pid = getpid();
  29.   fp = fopen (path, "w");
  30.   if (fp != NULL) 
  31.     {
  32.       fprintf (fp, "%dn", (int) pid);
  33.       fclose (fp);
  34.       return -1;
  35.     }
  36.   return pid;
  37. }
  38. pid_t
  39. pid_output_lock (char *path)
  40. {
  41.   int tmp;
  42.   int fd;
  43.   pid_t pid;
  44.   char buf[16], *p;
  45.   pid = getpid ();
  46.   fd = open (path, O_RDWR | O_CREAT | O_EXCL, 0644);
  47.   if (fd < 0)
  48.     {
  49.       fd = open (path, O_RDONLY);
  50.       if (fd < 0)
  51.         fprintf (stderr, "Can't creat pid lock file, exitn");
  52.       else
  53.         {
  54.           read (fd, buf, sizeof (buf));
  55.           if ((p = index (buf, 'n')) != NULL)
  56.             *p = 0;
  57.           fprintf (stderr, "Another process(%s) running, exitn", buf);
  58.         }
  59.       exit (-1);
  60.     }
  61.   else
  62.     {
  63.       sprintf (buf, "%dn", (int) pid);
  64.       tmp = write (fd, buf, strlen (buf));
  65.       close (fd);
  66.     }
  67.   return pid;
  68. }