127 lines
2.1 KiB
Plaintext
127 lines
2.1 KiB
Plaintext
|
.TH MEMORY 2
|
||
|
.SH NAME
|
||
|
memccpy, memchr, memcmp, memcpy, memmove, memset \- memory operations
|
||
|
.SH SYNOPSIS
|
||
|
.B #include <u.h>
|
||
|
.br
|
||
|
.B #include <libc.h>
|
||
|
.PP
|
||
|
.ta \w'\fLvoid* 'u
|
||
|
.B
|
||
|
void* memccpy(void *s1, void *s2, int c, ulong n)
|
||
|
.PP
|
||
|
.B
|
||
|
void* memchr(void *s, int c, ulong n)
|
||
|
.PP
|
||
|
.B
|
||
|
int memcmp(void *s1, void *s2, ulong n)
|
||
|
.PP
|
||
|
.B
|
||
|
void* memcpy(void *s1, void *s2, ulong n)
|
||
|
.PP
|
||
|
.B
|
||
|
void* memmove(void *s1, void *s2, ulong n)
|
||
|
.PP
|
||
|
.B
|
||
|
void* memset(void *s, int c, ulong n)
|
||
|
.SH DESCRIPTION
|
||
|
These functions operate efficiently on memory areas
|
||
|
(arrays of bytes bounded by a count, not terminated by a zero byte).
|
||
|
They do not check for the overflow of any receiving memory area.
|
||
|
.PP
|
||
|
.I Memccpy
|
||
|
copies bytes from memory area
|
||
|
.I s2
|
||
|
into
|
||
|
.IR s1 ,
|
||
|
stopping after the first occurrence of byte
|
||
|
.I c
|
||
|
has been copied, or after
|
||
|
.I n
|
||
|
bytes have been copied, whichever comes first.
|
||
|
It returns a pointer to the byte after
|
||
|
the copy of
|
||
|
.I c
|
||
|
in
|
||
|
.IR s1 ,
|
||
|
or zero if
|
||
|
.I c
|
||
|
was not found in the first
|
||
|
.I n
|
||
|
bytes of
|
||
|
.IR s2 .
|
||
|
.PP
|
||
|
.I Memchr
|
||
|
returns a pointer to the first
|
||
|
occurrence of byte
|
||
|
.I c
|
||
|
in the first
|
||
|
.I n
|
||
|
bytes of memory area
|
||
|
.IR s,
|
||
|
or zero if
|
||
|
.I c
|
||
|
does not occur.
|
||
|
.PP
|
||
|
.I Memcmp
|
||
|
compares its arguments, looking at the first
|
||
|
.I n
|
||
|
bytes only, and returns an integer
|
||
|
less than, equal to, or greater than 0,
|
||
|
according as
|
||
|
.I s1
|
||
|
is lexicographically less than, equal to, or
|
||
|
greater than
|
||
|
.IR s2 .
|
||
|
The comparison is bytewise unsigned.
|
||
|
.PP
|
||
|
.I Memcpy
|
||
|
copies
|
||
|
.I n
|
||
|
bytes from memory area
|
||
|
.I s2
|
||
|
to
|
||
|
.IR s1 .
|
||
|
It returns
|
||
|
.IR s1 .
|
||
|
.PP
|
||
|
.I Memmove
|
||
|
works like
|
||
|
.IR memcpy ,
|
||
|
except that it is guaranteed to work if
|
||
|
.I s1
|
||
|
and
|
||
|
.IR s2
|
||
|
overlap.
|
||
|
.PP
|
||
|
.I Memset
|
||
|
sets the first
|
||
|
.I n
|
||
|
bytes in memory area
|
||
|
.I s
|
||
|
to the value of byte
|
||
|
.IR c .
|
||
|
It returns
|
||
|
.IR s .
|
||
|
.SH SOURCE
|
||
|
All these routines have portable C implementations in
|
||
|
.BR /sys/src/libc/port .
|
||
|
Most also have machine-dependent assembly language implementations in
|
||
|
.BR /sys/src/libc/$objtype .
|
||
|
.SH SEE ALSO
|
||
|
.IR strcat (2)
|
||
|
.SH BUGS
|
||
|
ANSI C does not require
|
||
|
.I memcpy
|
||
|
to handle overlapping source and destination; on Plan 9, it does, so
|
||
|
.I memmove
|
||
|
and
|
||
|
.I memcpy
|
||
|
behave identically.
|
||
|
.PP
|
||
|
If
|
||
|
.I memcpy
|
||
|
and
|
||
|
.I memmove
|
||
|
are handed a negative count, they abort.
|