Go to main content

man pages section 3: Basic Library Functions

Exit Print View

Updated: Wednesday, July 27, 2022
 
 

bstring(3C)

Name

bstring, bcopy, bcmp, bzero, explicit_bzero - memory operations

Synopsis

#include <strings.h>

void bcopy(const void *s1, void *s2, size_t n);
int bcmp(const void *s1, const void *s2, size_t n);
void bzero(void *s, size_t n);
void explicit_bzero(void *s, size_t n);

Description

The bcopy(), bcmp(), bzero(), and explicit_bzero() functions operate as efficiently as possible on memory areas (arrays of bytes bounded by a count, not terminated by a null character). They do not check for the overflow of any receiving memory area. These functions are similar to the memcpy(), memcmp(), memset(), and explicit_memset() functions described on the memory(3C) manual page.

The bcopy() function copies n bytes from memory area s1 to s2. Copying between objects that overlap will take place correctly.

The bcmp() function compares the first n bytes of its arguments, returning 0 if they are identical and 1 otherwise. The bcmp() function always returns 0 when n is 0.

The bzero() function sets the first n bytes in memory area s to 0.

The explicit_bzero() function performs the same operation as bzero(). It differs from bzero() in that it will not be removed by compiler dead store analysis. The explicit_bzero() function is useful for clearing no longer needed sensitive data to ensure that it does not remain accessible in process memory.

Usage

These functions are provided for compatibility with older code. The memcpy(), memcmp(), and memset() functions defined by the C standards are more portable and preferred in newly written code.

Warnings

The bcopy() function takes the first two parameters in the opposite order of memcpy(). See memory(3C).

Attributes

See attributes(7) for descriptions of the following attributes:

ATTRIBUTE TYPE
ATTRIBUTE VALUE
Interface Stability
Committed
MT-Level
Async-Signal-Safe
Standard
See below

Standard

See standards(7) for descriptions of the following standards:

INTERFACES
APPLICABLE STANDARDS
bcopy(), bcmp(), bzero()
  • POSIX.1-2001 through 2004,
  • SUS through SUSv3,
  • XPG4v2 through XPG6
explicit_bzero()
None

See Also

timingsafe_bcmp(3C), freezero(3C), memory(3C), string(3C), attributes(7), standards(7)

History

The explicit_bzero() function first appeared in OpenBSD 5.5 and was added to Oracle Solaris in the Solaris 11.4.12 release.

The bcopy(), bcmp(), and bzero() functions were added to libc in the Solaris 2.5 release. In Solaris 2 releases prior to 2.5 they were in the libucb library.