Contents of /trunk/mkinitrd-magellan/busybox/networking/udhcp/pidfile.c
Parent Directory | Revision Log
Revision 532 -
(show annotations)
(download)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 1567 byte(s)
Sat Sep 1 22:45:15 2007 UTC (16 years, 8 months ago) by niro
File MIME type: text/plain
File size: 1567 byte(s)
-import if magellan mkinitrd; it is a fork of redhats mkinitrd-5.0.8 with all magellan patches and features; deprecates magellan-src/mkinitrd
1 | /* vi: set sw=4 ts=4: */ |
2 | /* pidfile.c |
3 | * |
4 | * Functions to assist in the writing and removing of pidfiles. |
5 | * |
6 | * Russ Dill <Russ.Dill@asu.edu> September 2001 |
7 | * |
8 | * This program is free software; you can redistribute it and/or modify |
9 | * it under the terms of the GNU General Public License as published by |
10 | * the Free Software Foundation; either version 2 of the License, or |
11 | * (at your option) any later version. |
12 | * |
13 | * This program is distributed in the hope that it will be useful, |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
16 | * GNU General Public License for more details. |
17 | * |
18 | * You should have received a copy of the GNU General Public License |
19 | * along with this program; if not, write to the Free Software |
20 | * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
21 | */ |
22 | |
23 | #include "common.h" |
24 | |
25 | |
26 | static const char *saved_pidfile; |
27 | |
28 | static void pidfile_delete(void) |
29 | { |
30 | if (saved_pidfile) unlink(saved_pidfile); |
31 | } |
32 | |
33 | |
34 | int pidfile_acquire(const char *pidfile) |
35 | { |
36 | int pid_fd; |
37 | if (!pidfile) return -1; |
38 | |
39 | pid_fd = open(pidfile, O_CREAT|O_WRONLY|O_TRUNC, 0644); |
40 | if (pid_fd < 0) { |
41 | bb_perror_msg("cannot open pidfile %s", pidfile); |
42 | } else { |
43 | lockf(pid_fd, F_LOCK, 0); |
44 | if (!saved_pidfile) |
45 | atexit(pidfile_delete); |
46 | saved_pidfile = pidfile; |
47 | } |
48 | |
49 | return pid_fd; |
50 | } |
51 | |
52 | |
53 | void pidfile_write_release(int pid_fd) |
54 | { |
55 | FILE *out; |
56 | |
57 | if (pid_fd < 0) return; |
58 | |
59 | out = fdopen(pid_fd, "w"); |
60 | if (out) { |
61 | fprintf(out, "%d\n", getpid()); |
62 | fclose(out); |
63 | } |
64 | lockf(pid_fd, F_UNLCK, 0); |
65 | close(pid_fd); |
66 | } |