<?xml version='1.0'?> <!--*-nxml-*-->
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
  "http://www.oasis-open.org/docbook/xml/4.2/docbookx.dtd">
<!-- SPDX-License-Identifier: LGPL-2.1-or-later -->

<refentry id="sd_journal_get_cutoff_realtime_usec" xmlns:xi="http://www.w3.org/2001/XInclude">

  <refentryinfo>
    <title>sd_journal_get_cutoff_realtime_usec</title>
    <productname>systemd</productname>
  </refentryinfo>

  <refmeta>
    <refentrytitle>sd_journal_get_cutoff_realtime_usec</refentrytitle>
    <manvolnum>3</manvolnum>
  </refmeta>

  <refnamediv>
    <refname>sd_journal_get_cutoff_realtime_usec</refname>
    <refname>sd_journal_get_cutoff_monotonic_usec</refname>
    <refpurpose>Read cut-off timestamps from the current journal entry</refpurpose>
  </refnamediv>

  <refsynopsisdiv>
    <funcsynopsis>
      <funcsynopsisinfo>#include &lt;systemd/sd-journal.h&gt;</funcsynopsisinfo>

      <funcprototype>
        <funcdef>int <function>sd_journal_get_cutoff_realtime_usec</function></funcdef>
        <paramdef>sd_journal *<parameter>j</parameter></paramdef>
        <paramdef>uint64_t *<parameter>from</parameter></paramdef>
        <paramdef>uint64_t *<parameter>to</parameter></paramdef>
      </funcprototype>

      <funcprototype>
        <funcdef>int <function>sd_journal_get_cutoff_monotonic_usec</function></funcdef>
        <paramdef>sd_journal *<parameter>j</parameter></paramdef>
        <paramdef>sd_id128_t <parameter>boot_id</parameter></paramdef>
        <paramdef>uint64_t *<parameter>from</parameter></paramdef>
        <paramdef>uint64_t *<parameter>to</parameter></paramdef>
      </funcprototype>

    </funcsynopsis>
  </refsynopsisdiv>

  <refsect1>
    <title>Description</title>

    <para><function>sd_journal_get_cutoff_realtime_usec()</function>
    retrieves the realtime (wallclock) timestamps of the first and
    last entries accessible in the journal. It takes three arguments:
    the journal context object <parameter>j</parameter> and two
    pointers <parameter>from</parameter> and <parameter>to</parameter>
    pointing at 64-bit unsigned integers to store the timestamps in.
    The timestamps are in microseconds since the epoch, i.e.
    <constant>CLOCK_REALTIME</constant>. Either one of the two
    timestamp arguments may be passed as <constant>NULL</constant> in
    case the timestamp is not needed, but not both.</para>

    <para><function>sd_journal_get_cutoff_monotonic_usec()</function>
    retrieves the monotonic timestamps of the first and last entries
    accessible in the journal. It takes three arguments: the journal
    context object <parameter>j</parameter>, a 128-bit identifier for
    the boot <parameter>boot_id</parameter>, and two pointers to
    64-bit unsigned integers to store the timestamps,
    <parameter>from</parameter> and <parameter>to</parameter>. The
    timestamps are in microseconds since boot-up of the specific boot,
    i.e. <constant>CLOCK_MONOTONIC</constant>. Since the monotonic
    clock begins new with every reboot it only defines a well-defined
    point in time when used together with an identifier identifying
    the boot, see
    <citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry>
    for more information. The function will return the timestamps for
    the boot identified by the passed boot ID. Either one of the two
    timestamp arguments may be passed as <constant>NULL</constant> in
    case the timestamp is not needed, but not both.</para>
  </refsect1>

  <refsect1>
    <title>Return Value</title>

    <para><function>sd_journal_get_cutoff_realtime_usec()</function>
    and <function>sd_journal_get_cutoff_monotonic_usec()</function>
    return 1 on success, 0 if not suitable entries are in the journal
    or a negative errno-style error code.</para>

    <para>Locations pointed to by parameters
    <parameter>from</parameter> and <parameter>to</parameter> will be
    set only if the return value is positive, and obviously, the
    parameters are non-null.</para>
  </refsect1>

  <refsect1>
    <title>Notes</title>

    <xi:include href="threads-aware.xml" xpointer="strict" />

    <xi:include href="libsystemd-pkgconfig.xml" xpointer="pkgconfig-text"/>
  </refsect1>

  <refsect1>
    <title>See Also</title>

    <para>
      <citerefentry><refentrytitle>systemd</refentrytitle><manvolnum>1</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd-journal</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_open</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_journal_get_realtime_usec</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>sd_id128_get_boot</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
      <citerefentry><refentrytitle>clock_gettime</refentrytitle><manvolnum>2</manvolnum></citerefentry>
    </para>
  </refsect1>

</refentry>
