MiniDLNA update: 1.0.19.1 to 1.0.20
[tomato.git] / release / src / router / zebra / lib / pid_output.c
blob4146244ac349a2c76c711152503c75544bbabf29
1 /*
2 * Process id output.
3 * Copyright (C) 1998, 1999 Kunihiro Ishiguro
5 * This file is part of GNU Zebra.
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.
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.
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.
23 #include <zebra.h>
25 pid_t
26 pid_output (char *path)
28 FILE *fp;
29 pid_t pid;
31 pid = getpid();
33 fp = fopen (path, "w");
34 if (fp != NULL)
36 fprintf (fp, "%d\n", (int) pid);
37 fclose (fp);
38 return -1;
40 return pid;
43 pid_t
44 pid_output_lock (char *path)
46 int tmp;
47 int fd;
48 pid_t pid;
49 char buf[16], *p;
51 pid = getpid ();
53 fd = open (path, O_RDWR | O_CREAT | O_EXCL, 0644);
54 if (fd < 0)
56 fd = open (path, O_RDONLY);
57 if (fd < 0)
58 fprintf (stderr, "Can't creat pid lock file, exit\n");
59 else
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);
66 exit (-1);
68 else
70 sprintf (buf, "%d\n", (int) pid);
71 tmp = write (fd, buf, strlen (buf));
72 close (fd);
75 return pid;