blob: 4146244ac349a2c76c711152503c75544bbabf29 [file] [log] [blame]
paul718e3742002-12-13 20:15:29 +00001/*
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
23#include <zebra.h>
24
25pid_t
26pid_output (char *path)
27{
28 FILE *fp;
29 pid_t pid;
30
31 pid = getpid();
32
33 fp = fopen (path, "w");
34 if (fp != NULL)
35 {
36 fprintf (fp, "%d\n", (int) pid);
37 fclose (fp);
38 return -1;
39 }
40 return pid;
41}
42
43pid_t
44pid_output_lock (char *path)
45{
46 int tmp;
47 int fd;
48 pid_t pid;
49 char buf[16], *p;
50
51 pid = getpid ();
52
53 fd = open (path, O_RDWR | O_CREAT | O_EXCL, 0644);
54 if (fd < 0)
55 {
56 fd = open (path, O_RDONLY);
57 if (fd < 0)
58 fprintf (stderr, "Can't creat pid lock file, exit\n");
59 else
60 {
61 read (fd, buf, sizeof (buf));
62 if ((p = index (buf, '\n')) != NULL)
63 *p = 0;
64 fprintf (stderr, "Another process(%s) running, exit\n", buf);
65 }
66 exit (-1);
67 }
68 else
69 {
70 sprintf (buf, "%d\n", (int) pid);
71 tmp = write (fd, buf, strlen (buf));
72 close (fd);
73 }
74
75 return pid;
76}
77