mirror of
https://github.com/opnsense/src.git
synced 2026-06-22 06:59:37 -04:00
This class wraps the pidfile_* API from libutil. The destructor calls pidfile_remove() when an object is destroyed. This class is similar to std::unique_ptr<> in that it retains exclusive ownership of the pidfh object. In addition to release and reset methods, write, close, and fileno methods are provided as wrappers for pidfile_*. Sponsored by: Chelsio Communications Pull Request: https://github.com/freebsd/freebsd-src/pull/1794
110 lines
2.2 KiB
Groff
110 lines
2.2 KiB
Groff
.\"
|
|
.\" SPDX-License-Identifier: BSD-2-Clause
|
|
.\"
|
|
.\" Copyright (c) 2025 Chelsio Communications, Inc.
|
|
.\" Written by: John Baldwin <jhb@FreeBSD.org>
|
|
.\"
|
|
.Dd July 31, 2025
|
|
.Dt FREEBSD::STRINGF 3
|
|
.Os
|
|
.Sh NAME
|
|
.Nm freebsd::pidfile
|
|
.Nd own a PID file handle
|
|
.Sh LIBRARY
|
|
.Lb libutil++
|
|
.Sh SYNOPSIS
|
|
.In libutil++.hh
|
|
.Pp
|
|
.Vt class freebsd::pidfile
|
|
{
|
|
.Bd -ragged -offset indent
|
|
.Fn pidfile
|
|
.Fn pidfile "struct pidfh *pfh"
|
|
.Fn pidfile "pidfile &&other"
|
|
.Fn ~pidfile
|
|
.Ft struct pidfh *
|
|
.Fn release
|
|
.Ft void
|
|
.Fn reset "struct pidfh *newpfh = nullptr"
|
|
.Ft int
|
|
.Fn write
|
|
.Ft int
|
|
.Fn close
|
|
.Ft int
|
|
.Fn fileno
|
|
.Ft "pidfile &"
|
|
.Fn operator= "pidfile &&other"
|
|
.Ft "pidfile &"
|
|
.Fn operator= "struct pidfh *pfh"
|
|
.Fn "explicit operator bool"
|
|
.Ed
|
|
};
|
|
.Sh DESCRIPTION
|
|
Each instance of this class owns a PID file handle created by
|
|
.Xr pidfile_open 3 .
|
|
This class is patterned on std::unique_ptr;
|
|
however,
|
|
rather than exporting the raw pointer via a
|
|
.Fn get
|
|
method,
|
|
this class provides wrapper methods for each of the other
|
|
.Xr pidfile 3
|
|
functions.
|
|
The currently-owned PID file is removed by invoking
|
|
.Xr pidfile_remove 3
|
|
when an instance of this class is destroyed.
|
|
The currently-owned PID file is also removed if it is replaced by the
|
|
.Fn reset
|
|
method or assignment operators.
|
|
.Pp
|
|
The
|
|
.Fn release
|
|
method relinquishes ownership of the current PID file handle and returns the
|
|
value of the previously-owned PID file handle.
|
|
.Pp
|
|
The
|
|
.Fn write
|
|
method writes out the PID of the current process to the PID file via
|
|
.Xr pidfile_write 3 .
|
|
.Pp
|
|
The
|
|
.Fn close
|
|
method closes the current PID file without removing it via
|
|
.Xr pidfile_close 3 .
|
|
If the close succeeds, the PID file handle is no longer valid.
|
|
.Pp
|
|
The
|
|
.Fn fileno
|
|
method returns the underlying file descriptor for the current PID file via
|
|
.Xr pidfile_fileno 3 .
|
|
.Pp
|
|
The explicit
|
|
.Vt bool
|
|
conversion operator permits testing the validity of an object.
|
|
The operator returns true if the instance owns a valid PID file handle.
|
|
.Sh EXAMPLES
|
|
.Bd -literal -offset indent
|
|
int
|
|
main()
|
|
{
|
|
freebsd::pidfile pf(pidfile_open("/var/run/daemon.pid",
|
|
0600, NULL));
|
|
if (!pf)
|
|
err(1, "pidfile_open");
|
|
|
|
if (daemon(0, 0) == -1) {
|
|
warn("daemon");
|
|
return 1;
|
|
}
|
|
|
|
pf->write();
|
|
|
|
for (;;) {
|
|
/* Do Work */
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
.Ed
|
|
.Sh SEE ALSO
|
|
.Xr pidfile 3
|