OpenVAS Libraries  9.0.3
pidfile.c File Reference

PID-file management. More...

#include <glib.h>
#include <glib/gstdio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include "pidfile.h"
Include dependency graph for pidfile.c:

Go to the source code of this file.

Macros

#define G_LOG_DOMAIN   "base pidfile"
 GLib log domain. More...
 

Functions

int pidfile_create (gchar *daemon_name)
 Create a PID-file. More...
 
void pidfile_remove (gchar *daemon_name)
 Remove PID file. More...
 

Detailed Description

PID-file management.

Definition in file pidfile.c.

Macro Definition Documentation

◆ G_LOG_DOMAIN

#define G_LOG_DOMAIN   "base pidfile"

GLib log domain.

Definition at line 46 of file pidfile.c.

Function Documentation

◆ pidfile_create()

int pidfile_create ( gchar *  daemon_name)

Create a PID-file.

A standard PID file will be created for the given daemon name.

Parameters
[in]daemon_nameThe name of the daemon (e.g. "openvasmd")
Returns
0 for success, anything else indicates an error.

Definition at line 59 of file pidfile.c.

60 {
61  gchar *name_pid = g_strconcat (daemon_name, ".pid", NULL);
62  gchar *pidfile_name = g_build_filename (OPENVAS_PID_DIR, name_pid, NULL);
63  FILE *pidfile = g_fopen (pidfile_name, "w");
64 
65  g_free (name_pid);
66 
67  if (pidfile == NULL)
68  {
69  g_critical ("%s: failed to open pidfile: %s\n", __FUNCTION__,
70  strerror (errno));
71  return 1;
72  }
73  else
74  {
75  g_fprintf (pidfile, "%d\n", getpid ());
76  fclose (pidfile);
77  g_free (pidfile_name);
78  }
79  return 0;
80 }

◆ pidfile_remove()

void pidfile_remove ( gchar *  daemon_name)

Remove PID file.

Parameters
[in]daemon_nameThe name of the daemon (e.g. "openvasmd")

Definition at line 88 of file pidfile.c.

89 {
90  gchar *name_pid = g_strconcat (daemon_name, ".pid", NULL);
91  gchar *pidfile_name = g_build_filename (OPENVAS_PID_DIR, name_pid, NULL);
92  gchar *pidfile_contents;
93 
94  g_free (name_pid);
95 
96  if (g_file_get_contents (pidfile_name, &pidfile_contents, NULL, NULL))
97  {
98  int pid = atoi (pidfile_contents);
99 
100  if (pid == getpid ())
101  {
102  g_unlink (pidfile_name);
103  }
104  g_free (pidfile_contents);
105  }
106 
107  g_free (pidfile_name);
108 }