1 .\" Copyright (c) 2015 Apple Computer, Inc. All rights reserved.
3 .\" The contents of this file constitute Original Code as defined in and
4 .\" are subject to the Apple Public Source License Version 1.1 (the
5 .\" "License"). You may not use this file except in compliance with the
6 .\" License. Please obtain a copy of the License at
7 .\" http://www.apple.com/publicsource and read it before using this file.
9 .\" This Original Code and all software distributed under the License are
10 .\" distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
11 .\" EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
12 .\" INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
13 .\" FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT. Please see the
14 .\" License for the specific language governing rights and limitations
15 .\" under the License.
24 .Nd create copy on write clones of files
26 .Fd #include <sys/attr.h>
27 .Fd #include <sys/clonefile.h>
30 .Fn clonefile "const char * src" "const char * dst" "int flags"
32 .Fn clonefileat "int src_dirfd" "const char * src" "int dst_dirfd" "const char * dst" "int flags"
34 .Fn fclonefileat "int srcfd" "int dst_dirfd" "const char * dst" "int flags"
39 function causes the named file
41 to be cloned to the named file
45 shares its data blocks with the
47 file but has its own copy of attributes, extended attributes and ACL's which are identical to
48 those of the named file
50 with the exceptions listed below
56 ownership information is set as it would be if
64 if the current user does not have privileges to change ownership.
68 setuid and setgid bits are turned off in the mode bits for regular files.
71 Subsequent writes to either the original or cloned file are private to the file being modified (copy-on-write).
74 must not exist for the call to be successful. Since the clonefile() system call might not
75 allocate new storage for data blocks, it is possible for a subsequent overwrite of an existing data block to
78 names a directory, the directory hierarchy is cloned as if each item was cloned individually. However, the use of
80 is more appropriate for copying large directory hierarchies instead of
85 function is equivalent to
87 except in the case where either
91 specifies a relative path. If src is a relative path, the file to be cloned is located relative to the directory associated
92 with the file descriptor
94 instead of the current working directory. If
96 is a relative path, the same happens only relative to the directory associated with
100 is passed the special value
106 parameters, the current working directory is used in the determination of the file for
107 the respective path parameter.
111 function is similar to
113 except that the source is identified by file descriptor
115 rather than a path (as in
122 parameter specifies the options that can be passed. Options are specified in the
124 argument by or'ing the following values:
126 .Bl -tag -width CLONE_NOFOLLOW
129 Don't follow the src file if it is a symbolic link (applicable only if the source is not a directory).
130 The symbolic link is itself cloned if
132 names a symbolic link.
141 functions are expected to be atomic i.e. the system call will result all new objects being created
142 successfully or no new objects will be created. POSIX conforming applications cannot use
146 Upon successful completion,
148 returns 0. Otherwise, a value of -1 is returned and errno is set to indicate the error.
151 Not all volumes support
153 A volume can be tested for
157 to get the volume capabilities attribute ATTR_VOL_CAPABILITIES, and then testing the VOL_CAP_INT_CLONE flag.
162 function will fail if:
166 Read permissions are denied on the source or write permissions are on the destination parent.
169 The underlying filesystem does not support this call.
180 are not on the same filesystem.
185 parameter is invalid.
188 There is no free space remaining on the file system containing the file.
191 An I/O error occurred while reading from or writing to the file system.
194 The calling process does not have appropriate privileges.
198 is the root of the Filesystem.
201 A loop exists in symbolic links encountered during in resolution
209 The requested operation requires writing in a directory on a read-only file system.
211 .It Bq Er ENAMETOOLONG
212 The length of a component of a pathname is longer than {NAME_MAX}.
219 does not name an existing file or path is an empty string.
222 A component of path prefix of either
226 names an existing file that is neither a directory nor a symbolic link to a directory,
227 or the path argument contains at least one non <slash> character and ends with one or
228 more trailing <slash> characters and the last pathname component names an existing file that
229 is neither a directory nor a symbolic link to a directory.
236 functions may fail with the following errors
243 argument does not specify an absolute path and the
249 nor a valid file descriptor open for searching.
256 argument is not an absolute path and
262 nor a file descriptor associated with a directory.
278 function calls appeared in OS X version 10.12