xref: /illumos-gate/usr/src/man/man3c/memory.3c (revision bbf215553c7233fbab8a0afdf1fac74c44781867)
1d6bf1708SRobert Mustacchi.\"
2f6ed5ca2SRobert Mustacchi.\" Copyright (c) 2014, Joyent, Inc.
3c10c16deSRichard Lowe.\" Copyright (c) 2009, Sun Microsystems, Inc.  All Rights Reserved.
4c10c16deSRichard Lowe.\" Copyright 1989 AT&T
5d6bf1708SRobert Mustacchi.\" Copyright 2021 Oxide Computer Company
6d6bf1708SRobert Mustacchi.\"
7d6bf1708SRobert Mustacchi.\" The contents of this file are subject to the terms of the
8d6bf1708SRobert Mustacchi.\" Common Development and Distribution License (the "License").
9d6bf1708SRobert Mustacchi.\" You may not use this file except in compliance with the License.
10d6bf1708SRobert Mustacchi.\"
11d6bf1708SRobert Mustacchi.\" You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
12d6bf1708SRobert Mustacchi.\" or http://www.opensolaris.org/os/licensing.
13d6bf1708SRobert Mustacchi.\" See the License for the specific language governing permissions
14d6bf1708SRobert Mustacchi.\" and limitations under the License.
15d6bf1708SRobert Mustacchi.\"
16d6bf1708SRobert Mustacchi.\" When distributing Covered Code, include this CDDL HEADER in each
17d6bf1708SRobert Mustacchi.\" file and include the License file at usr/src/OPENSOLARIS.LICENSE.
18d6bf1708SRobert Mustacchi.\" If applicable, add the following below this CDDL HEADER, with the
19d6bf1708SRobert Mustacchi.\" fields enclosed by brackets "[]" replaced with your own identifying
20d6bf1708SRobert Mustacchi.\" information: Portions Copyright [yyyy] [name of copyright owner]
21d6bf1708SRobert Mustacchi.\"
2225cdfc4fSDenis Ovsienko.Dd January 25, 2022
23d6bf1708SRobert Mustacchi.Dt MEMORY 3C
24d6bf1708SRobert Mustacchi.Os
25d6bf1708SRobert Mustacchi.Sh NAME
26d6bf1708SRobert Mustacchi.Nm memory ,
27d6bf1708SRobert Mustacchi.Nm memccpy ,
28d6bf1708SRobert Mustacchi.Nm memchr ,
29d6bf1708SRobert Mustacchi.Nm memcmp ,
30d6bf1708SRobert Mustacchi.Nm memcpy ,
31d6bf1708SRobert Mustacchi.Nm memmem ,
32d6bf1708SRobert Mustacchi.Nm memmove ,
33d6bf1708SRobert Mustacchi.Nm memrchr ,
34d6bf1708SRobert Mustacchi.Nm memset
35d6bf1708SRobert Mustacchi.Nd memory operations
36d6bf1708SRobert Mustacchi.Sh SYNOPSIS
37d6bf1708SRobert Mustacchi.In string.h
38d6bf1708SRobert Mustacchi.Ft "void *"
39d6bf1708SRobert Mustacchi.Fo memccpy
40d6bf1708SRobert Mustacchi.Fa "void *restrict s1"
41d6bf1708SRobert Mustacchi.Fa "const void *restrict s2"
42d6bf1708SRobert Mustacchi.Fa "int c"
43d6bf1708SRobert Mustacchi.Fa "size_t n"
44d6bf1708SRobert Mustacchi.Fc
45d6bf1708SRobert Mustacchi.Ft "void *"
46d6bf1708SRobert Mustacchi.Fo memchr
4725cdfc4fSDenis Ovsienko.Fa "void *s"
48d6bf1708SRobert Mustacchi.Fa "int c"
49d6bf1708SRobert Mustacchi.Fa "size_t n"
50d6bf1708SRobert Mustacchi.Fc
51d6bf1708SRobert Mustacchi.Ft int
52d6bf1708SRobert Mustacchi.Fo memcmp
53d6bf1708SRobert Mustacchi.Fa "const void *s1"
54d6bf1708SRobert Mustacchi.Fa "const void *s2"
55d6bf1708SRobert Mustacchi.Fa "size_t n"
56d6bf1708SRobert Mustacchi.Fc
57d6bf1708SRobert Mustacchi.Ft "void *"
58d6bf1708SRobert Mustacchi.Fo memcpy
59d6bf1708SRobert Mustacchi.Fa "void *restrict s1"
60d6bf1708SRobert Mustacchi.Fa "const void *restrict s2"
61d6bf1708SRobert Mustacchi.Fa "size_t n"
62d6bf1708SRobert Mustacchi.Fc
63d6bf1708SRobert Mustacchi.Ft "void *"
64d6bf1708SRobert Mustacchi.Fo memmem
65d6bf1708SRobert Mustacchi.Fa "const void *l"
66d6bf1708SRobert Mustacchi.Fa "size_t l_len"
67d6bf1708SRobert Mustacchi.Fa "const void *s"
68d6bf1708SRobert Mustacchi.Fa "size_t s_len"
69d6bf1708SRobert Mustacchi.Fc
70d6bf1708SRobert Mustacchi.Ft "void *"
71d6bf1708SRobert Mustacchi.Fo memmove
72d6bf1708SRobert Mustacchi.Fa "void *s1"
73d6bf1708SRobert Mustacchi.Fa "const void *s2"
74d6bf1708SRobert Mustacchi.Fa "size_t n"
75d6bf1708SRobert Mustacchi.Fc
76d6bf1708SRobert Mustacchi.Ft "void *"
77d6bf1708SRobert Mustacchi.Fo memrchr
7825cdfc4fSDenis Ovsienko.Fa "void *s"
79d6bf1708SRobert Mustacchi.Fa "int c"
80d6bf1708SRobert Mustacchi.Fa "size_t n"
81d6bf1708SRobert Mustacchi.Fc
82d6bf1708SRobert Mustacchi.Ft "void *"
83d6bf1708SRobert Mustacchi.Fo memset
84d6bf1708SRobert Mustacchi.Fa "void *s"
8525cdfc4fSDenis Ovsienko.Fa "int c"
86d6bf1708SRobert Mustacchi.Fa "size_t n"
87d6bf1708SRobert Mustacchi.Fc
88d6bf1708SRobert Mustacchi.Sh DESCRIPTION
89c10c16deSRichard LoweThese functions operate as efficiently as possible on memory areas (arrays of
90d6bf1708SRobert Mustacchibytes bounded by a count, not terminated by a null character).
91d6bf1708SRobert MustacchiThey do not check for the overflow of any receiving memory area.
92d6bf1708SRobert Mustacchi.Pp
93d6bf1708SRobert MustacchiThe
94d6bf1708SRobert Mustacchi.Fn memccpy
95d6bf1708SRobert Mustacchifunction copies bytes from memory area
96d6bf1708SRobert Mustacchi.Fa s2
97d6bf1708SRobert Mustacchiinto
98d6bf1708SRobert Mustacchi.Fa s1 ,
99d6bf1708SRobert Mustacchistopping after the first occurrence of
100d6bf1708SRobert Mustacchi.Fa c
101d6bf1708SRobert Mustacchi.Po
102d6bf1708SRobert Mustacchiconverted to an
103d6bf1708SRobert Mustacchi.Vt unsigned char
104d6bf1708SRobert Mustacchi.Pc
105d6bf1708SRobert Mustacchihas been copied, or after
106d6bf1708SRobert Mustacchi.Fa n
107d6bf1708SRobert Mustacchibytes have been copied, whichever comes first.
108d6bf1708SRobert MustacchiIt returns a pointer to the byte after the copy of
109d6bf1708SRobert Mustacchi.Fa c
110d6bf1708SRobert Mustacchiin
111d6bf1708SRobert Mustacchi.Fa s1 ,
112d6bf1708SRobert Mustacchior a
113d6bf1708SRobert Mustacchi.Dv NULL
114d6bf1708SRobert Mustacchipointer if
115d6bf1708SRobert Mustacchi.Fa c
116d6bf1708SRobert Mustacchiwas not found in the first
117d6bf1708SRobert Mustacchi.Fa n
118d6bf1708SRobert Mustacchibytes of
119d6bf1708SRobert Mustacchi.Fa s2 .
120d6bf1708SRobert Mustacchi.Pp
121d6bf1708SRobert MustacchiThe
122d6bf1708SRobert Mustacchi.Fn memchr
123d6bf1708SRobert Mustacchifunction returns a pointer to the first occurrence of
124d6bf1708SRobert Mustacchi.Fa c
125d6bf1708SRobert Mustacchi.Po
126d6bf1708SRobert Mustacchiconverted to an
127d6bf1708SRobert Mustacchi.Vt unsigned char
128d6bf1708SRobert Mustacchi.Pc
129d6bf1708SRobert Mustacchiin the first
130d6bf1708SRobert Mustacchi.Fa n
131d6bf1708SRobert Mustacchibytes
132d6bf1708SRobert Mustacchi.Po
133d6bf1708SRobert Mustacchieach interpreted as an
134d6bf1708SRobert Mustacchi.Vt unsigned char
135d6bf1708SRobert Mustacchi.Pc
136d6bf1708SRobert Mustacchiof memory area
137d6bf1708SRobert Mustacchi.Fa s ,
138d6bf1708SRobert Mustacchior a
139d6bf1708SRobert Mustacchi.Dv NULL
140d6bf1708SRobert Mustacchipointer if
141d6bf1708SRobert Mustacchi.Fa c
142d6bf1708SRobert Mustacchidoes not occur.
143d6bf1708SRobert Mustacchi.Pp
144d6bf1708SRobert MustacchiThe
145d6bf1708SRobert Mustacchi.Fn memrchr
146d6bf1708SRobert Mustacchifunction behaves similarly to the
147d6bf1708SRobert Mustacchi.Fn memchr
148d6bf1708SRobert Mustacchifunction, except that the memory area is searched in reverse from the
149d6bf1708SRobert Mustacchilast byte.
150d6bf1708SRobert Mustacchi.Pp
151d6bf1708SRobert MustacchiThe
152d6bf1708SRobert Mustacchi.Fn memcmp
153d6bf1708SRobert Mustacchifunction compares its arguments, looking at the first
154d6bf1708SRobert Mustacchi.Fa n
155d6bf1708SRobert Mustacchibytes
156d6bf1708SRobert Mustacchi.Po
157d6bf1708SRobert Mustacchieach interpreted as an
158d6bf1708SRobert Mustacchi.Vt unsigned char
159d6bf1708SRobert Mustacchi.Pc ,
160d6bf1708SRobert Mustacchiand returns an integer less than, equal to, or greater than 0, according as
161d6bf1708SRobert Mustacchi.Fa s1
162d6bf1708SRobert Mustacchiis less than, equal to, or greater than
163d6bf1708SRobert Mustacchi.Fa s2
164d6bf1708SRobert Mustacchiwhen taken to be unsigned characters.
165d6bf1708SRobert Mustacchi.Pp
166d6bf1708SRobert MustacchiThe
167d6bf1708SRobert Mustacchi.Fn memcpy
168d6bf1708SRobert Mustacchifunction copies
169d6bf1708SRobert Mustacchi.Fa n
170d6bf1708SRobert Mustacchibytes from memory area
171d6bf1708SRobert Mustacchi.Fa s2
172d6bf1708SRobert Mustacchito
173d6bf1708SRobert Mustacchi.Fa s1
174d6bf1708SRobert MustacchiIt returns
175d6bf1708SRobert Mustacchi.Fa s1 .
176d6bf1708SRobert MustacchiIf copying takes place between objects that overlap, the behavior is undefined.
177d6bf1708SRobert MustacchiIn such cases, use
178d6bf1708SRobert Mustacchi.Fn memmove
179d6bf1708SRobert Mustacchiinstead.
180d6bf1708SRobert Mustacchi.Pp
181d6bf1708SRobert MustacchiThe
182d6bf1708SRobert Mustacchi.Fn memmem
183d6bf1708SRobert Mustacchifunction searches for the
184d6bf1708SRobert Mustacchi.Fa s_len
185d6bf1708SRobert Mustacchilong byte pattern
186d6bf1708SRobert Mustacchi.Fa s
187d6bf1708SRobert Mustacchiin the memory region starting at
188d6bf1708SRobert Mustacchi.Fa l
189d6bf1708SRobert Mustacchifor
190d6bf1708SRobert Mustacchi.Fa l_len
191d6bf1708SRobert Mustacchibytes.
192d6bf1708SRobert MustacchiIf a match is found, a pointer to the starting location in
193d6bf1708SRobert Mustacchi.Fa l
194d6bf1708SRobert Mustacchiis returned.
195d6bf1708SRobert MustacchiIf no match is found,
196d6bf1708SRobert Mustacchi.Fa l_len
197d6bf1708SRobert Mustacchiis zero,
198d6bf1708SRobert Mustacchi.Fa s_len
199d6bf1708SRobert Mustacchiis zero, or
200d6bf1708SRobert Mustacchi.Fa l_len
201d6bf1708SRobert Mustacchiis less than
202d6bf1708SRobert Mustacchi.Fa s_len
203d6bf1708SRobert Mustacchithen a
204d6bf1708SRobert Mustacchi.Dv NULL
205d6bf1708SRobert Mustacchipointer is return.
206d6bf1708SRobert Mustacchi.Pp
207d6bf1708SRobert MustacchiThe
208d6bf1708SRobert Mustacchi.Fn memmove
209d6bf1708SRobert Mustacchifunction copies
210d6bf1708SRobert Mustacchi.Fa n
211d6bf1708SRobert Mustacchibytes from memory area
212d6bf1708SRobert Mustacchi.Fa s2
213d6bf1708SRobert Mustacchito memory area
214d6bf1708SRobert Mustacchi.Fa s1 .
215d6bf1708SRobert MustacchiCopying between objects that overlap will take place correctly.
216d6bf1708SRobert MustacchiIt returns
217d6bf1708SRobert Mustacchi.Fa s1 .
218d6bf1708SRobert Mustacchi.Pp
219d6bf1708SRobert MustacchiThe
220d6bf1708SRobert Mustacchi.Fn memset
221d6bf1708SRobert Mustacchifunction sets the first
222d6bf1708SRobert Mustacchi.Fa n
223d6bf1708SRobert Mustacchibytes in memory area
224d6bf1708SRobert Mustacchi.Fa s
225d6bf1708SRobert Mustacchito the value of
226d6bf1708SRobert Mustacchi.Fa c
227d6bf1708SRobert Mustacchi.Po
228d6bf1708SRobert Mustacchiconverted to an
229d6bf1708SRobert Mustacchi.Vt unsigned char
230d6bf1708SRobert Mustacchi.Pc .
231d6bf1708SRobert MustacchiIt returns
232d6bf1708SRobert Mustacchi.Fa s .
233d6bf1708SRobert Mustacchi.Sh USAGE
234d6bf1708SRobert MustacchiUsing
235d6bf1708SRobert Mustacchi.Fn memcpy
236d6bf1708SRobert Mustacchimight be faster than using
237d6bf1708SRobert Mustacchi.Fn memmove
238d6bf1708SRobert Mustacchiif the
239c10c16deSRichard Loweapplication knows that the objects being copied do not overlap.
240d6bf1708SRobert Mustacchi.Sh INTERFACE STABILITY
241d6bf1708SRobert Mustacchi.Sy Committed
242d6bf1708SRobert Mustacchi.Sh MT-LEVEL
243d6bf1708SRobert Mustacchi.Sy MT-Safe
244d6bf1708SRobert Mustacchi.Sh SEE ALSO
245d6bf1708SRobert Mustacchi.Xr string 3C ,
246*bbf21555SRichard Lowe.Xr attributes 7 ,
247*bbf21555SRichard Lowe.Xr standards 7
248d6bf1708SRobert Mustacchi.Sh NOTES
249d6bf1708SRobert MustacchiOverlap between objects being copied can arise even when their
250d6bf1708SRobert Mustacchi.Pq virtual
251c10c16deSRichard Loweaddress ranges appear to be disjoint; for example, as a result of
252c10c16deSRichard Lowememory-mapping overlapping portions of the same underlying file, or of
253c10c16deSRichard Loweattaching the same shared memory segment more than once.
254