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 and timestamps are set as they would be if
62 setuid and setgid bits are turned off in the mode bits for regular files.
65 Subsequent writes to either the original or cloned file are private to the file being modified (copy-on-write).
68 must not exist for the call to be successful. Since the clonefile() system call might not
69 allocate new storage for data blocks, it is possible for a subsequent overwrite of an existing data block to
72 names a directory, the directory hierarchy is cloned as if each item was cloned individually. However, the use of
74 is more appropriate for copying large directory hierarchies instead of
79 function is equivalent to
81 except in the case where either
85 specifies a relative path. If src is a relative path, the file to be cloned is located relative to the directory associated
86 with the file descriptor
88 instead of the current working directory. If
90 is a relative path, the same happens only relative to the directory associated with
94 is passed the special value
100 parameters, the current working directory is used in the determination of the file for
101 the respective path parameter.
105 function is similar to
107 except that the source is identified by file descriptor
109 rather than a path (as in
116 parameter specifies the options that can be passed. Options are specified in the
118 argument by or'ing the following values:
120 .Bl -tag -width CLONE_NOFOLLOW
123 Don't follow the src file if it is a symbolic link (applicable only if the source is not a directory).
124 The symbolic link is itself cloned if
126 names a symbolic link.
135 functions are expected to be atomic i.e. the system call will result all new objects being created
136 successfully or no new objects will be created. POSIX conforming applications cannot use
140 Upon successful completion,
142 returns 0. Otherwise, a value of -1 is returned and errno is set to indicate the error.
145 Not all volumes support
147 A volume can be tested for
151 to get the volume capabilities attribute ATTR_VOL_CAPABILITIES, and then testing the VOL_CAP_INT_CLONE flag.
156 function will fail if:
160 Read permissions are denied on the source or write permissions are on the destination parent.
163 The underlying filesystem does not support this call.
174 are not on the same filesystem.
179 parameter is invalid.
182 There is no free space remaining on the file system containing the file.
185 An I/O error occurred while reading from or writing to the file system.
188 The calling process does not have appropriate privileges.
192 is the root of the Filesystem.
195 A loop exists in symbolic links encountered during in resolution
203 The requested operation requires writing in a directory on a read-only file system.
205 .It Bq Er ENAMETOOLONG
206 The length of a component of a pathname is longer than {NAME_MAX}.
213 does not name an existing file or path is an empty string.
216 A component of path prefix of either
220 names an existing file that is neither a directory nor a symbolic link to a directory,
221 or the path argument contains at least one non <slash> character and ends with one or
222 more trailing <slash> characters and the last pathname component names an existing file that
223 is neither a directory nor a symbolic link to a directory.
230 functions may fail with the following errors
237 argument does not specify an absolute path and the
243 nor a valid file descriptor open for searching.
250 argument is not an absolute path and
256 nor a file descriptor associated with a directory.
271 function calls appeared in OS X version 10.12