---
name: "xo_emit_h"
section: "3"
platform: "freebsd"
package: "base"
version: "16.0-CURRENT-20261027-61c70dc16a79"
release: "FreeBSD 16.0-CURRENT (2026-10-27)"
platforms: ["freebsd"]
url: "https://new.carta.tech/xo_emit"
---

# xo\_emit\_h(3)

emit formatted output based on format string and arguments

Part of [xo\_emit(3)](/xo_emit/3.md).

## NAME

**xo\_emit**, **xo\_emit\_h**, **xo\_emit\_hv** – emit formatted output based on format string and arguments

## LIBRARY

library “libxo”

## SYNOPSIS

**#include \<libxo/xo.h\>**

*xo\_ssize\_t*\

**xo\_emit**(*const char \*fmt*, *...*);

*xo\_ssize\_t*\

**xo\_emit\_h**(*xo\_handle\_t \*xop*, *const char \*fmt*, *...*);

*xo\_ssize\_t*\

**xo\_emit\_hv**(*xo\_handle\_t \*xop*, *const char \*fmt*, *va\_list vap*);

## DESCRIPTION

The **xo\_emit**() function emits formatted output using the description in a format string along with a set of zero or more arguments, in a style similar to [printf(3)](/printf/3.md) but using a more complex format description string, as described in [xo\_format(5)](/xo_format/5.md).

**xo\_emit**() uses the default output handle, as described in [libxo(3)](/libxo/3.md), where **xo\_emit\_h**() uses an explicit handle. **xo\_emit\_hv**() accepts a *va\_list* for additional flexibility.

## EXAMPLES

In this example, a set of four values is emitted using the following source code:

```
    xo_emit(" {:lines/%7ju} {:words/%7ju} "
            "{:characters/%7ju} {d:filename/%s}\n",
            linect, wordct, charct, file);
```

Output can then be generated in various style, using  the "--libxo" option:

```
    % wc /etc/motd
          25     165    1140 /etc/motd
    % wc --libxo xml,pretty,warn /etc/motd
    <wc>
      <file>
        <lines>25</lines>
        <words>165</words>
        <characters>1140</characters>
        <filename>/etc/motd</filename>
      </file>
    </wc>
    % wc --libxo json,pretty,warn /etc/motd
    {
      "wc": {
        "file": [
          {
            "lines": 25,
            "words": 165,
            "characters": 1140,
            "filename": "/etc/motd"
          }
        ]
      }
    }
    % wc --libxo html,pretty,warn /etc/motd
    <div class="line">
      <div class="text"> </div>
      <div class="data" data-tag="lines">     25</div>
      <div class="text"> </div>
      <div class="data" data-tag="words">    165</div>
      <div class="text"> </div>
      <div class="data" data-tag="characters">   1140</div>
      <div class="text"> </div>
      <div class="data" data-tag="filename">/etc/motd</div>
    </div>
```

## RETURN CODE

**xo\_emit** returns a negative value on error.  If the **XOF\_COLUMNS** flag has been turned on for the specific handle using [xo\_set\_flags(3)](/xo_set_flags/3.md), then the number of display columns consumed by the output will be returned.

## SEE ALSO

[xo\_open\_container(3)](/xo_open_container/3.md), [xo\_open\_list(3)](/xo_open_list/3.md), [xo\_emit\_f(3)](/xo_emit_f/3.md), [xo\_format(5)](/xo_format/5.md), [libxo(3)](/libxo/3.md)

## HISTORY

The **libxo** library first appeared in FreeBSD 11.0.

## AUTHORS

**libxo** was written by Phil Shafer ⟨*phil@freebsd.org*⟩.
