HUMANIZE_NUMBER(9) | Kernel Developer's Manual | HUMANIZE_NUMBER(9)

# NAME

`humanize_number`, `format_bytes` — human readable numbers

# SYNOPSIS

int
`humanize_number`(char *buf, size_t len, uint64_t number, const char *suffix, int divisor);

int
`format_bytes`(char *buf, size_t len, uint64_t number);

# DESCRIPTION

The `humanize_number`() function formats the unsigned 64-bit quantity given in number into buf. A space and then suffix is appended to the end. The supplied buf must be at least len bytes long.

If the formatted number (including suffix) is too long to fit into buf, `humanize_number`() divides number by divisor until it will fit. In this case, suffix is prefixed with the appropriate SI designator. Suitable values of divisor are 1024 or 1000 to remain consistent with the common meanings of the SI designator prefixes.

The prefixes are:

Prefix | Description | Multiplier
k | kilo | 1024
M | mega | 1048576
G | giga | 1073741824
T | tera | 1099511627776
P | peta | 1125899906842624
E | exa | 1152921504606846976

The len argument must be at least 4 plus the length of suffix, in order to ensure a useful result in buf.

The `format_bytes`() function is a front-end to `humanize_number`(). It calls the latter with a suffix of “B”. Also, if the suffix in the returned buf would not have a prefix, the suffix is removed. This means that a result of “100000” occurs, instead of “100000 B”.

# RETURN VALUES

Both functions return the number of characters stored in buf (excluding the terminating NUL) upon success, or -1 upon failure.

# SEE ALSO

humanize_number(3)

# HISTORY

These functions first appeared in NetBSD 1.5.

August 7, 2010 | NetBSD 11.0