Documentation Archive Developer
ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages


This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).

COPYFILE(3)              BSD Library Functions Manual              COPYFILE(3)

     copyfile, fcopyfile, copyfile_state_alloc, copyfile_state_free,
     copyfile_state_get, copyfile_state_set -- copy a file

     Standard C Library (libc, -lc)

     #include <copyfile.h>

     copyfile(const char *from, const char *to, copyfile_state_t state,
         copyfile_flags_t flags);

     fcopyfile(int from, int to, copyfile_state_t state,
         copyfile_flags_t flags);


     copyfile_state_free(copyfile_state_t state);

     copyfile_state_get(copyfile_state_t state, uint32_t flag, void * dst);

     copyfile_state_set(copyfile_state_t state, uint32_t flag,
         const void * src);

     These functions are used to copy a file's data and/or metadata.  (Meta-data (Metadata
     data consists of permissions, extended attributes, access control lists,
     and so forth.)

     The copyfile_state_alloc() function initializes a copyfile_state_t object
     (which is an opaque data type).  This object can be passed to copyfile()
     and fcopyfile(); copyfile_state_get() and copyfile_state_set() can be
     used to manipulate the state (see below).  The copyfile_state_free()
     function is used to deallocate the object and its contents.

     The copyfile() function can copy the named from file to the named to
     file; the fcopyfile() function does the same, but using the file descrip-tors descriptors
     tors of already-opened files.  If the state parameter is the return value
     from copyfile_state_alloc(), then copyfile() and fcopyfile() will use the
     information from the state object; if it is NULL, then both functions
     will work normally, but less control will be available to the caller.
     The flags parameter controls which contents are copied:

     COPYFILE_ACL    Copy the source file's access control lists.

     COPYFILE_STAT   Copy the source file's POSIX information (mode, modifica-tion modification
                     tion time, etc.).

     COPYFILE_XATTR  Copy the source file's extended attributes.

     COPYFILE_DATA   Copy the source file's data.

     These values may be or'd together; several convenience macros are pro-vided: provided:

     COPYFILE_SECURITY  Copy the source file's POSIX and ACL information;
                        equivalent to (COPYFILE_STAT|COPYFILE_ACL).

     COPYFILE_METADATA  Copy the metadata; equivalent to

     COPYFILE_ALL       Copy the entire file; equivalent to

     The copyfile() and fcopyfile() functions can also have their behavior
     modified by the following flags:

     COPYFILE_CHECK         Return a bitmask (corresponding to the flags argu-ment) argument)
                            ment) indicating which contents would be copied;
                            no data are actually copied.  (E.g., if flags was
                            set to COPYFILE_CHECK|COPYFILE_METADATA, and the
                            from file had extended attributes but no ACLs, the
                            return value would be COPYFILE_XATTR .)

     COPYFILE_PACK          Serialize the from file.  The to file is an Apple-Double-format AppleDouble-format
                            Double-format file.

     COPYFILE_UNPACK        Unserialize the from file.  The from file is an
                            AppleDouble-format file; the to file will have the
                            extended attributes, ACLs, resource fork, and
                            FinderInfo data from the to file, regardless of
                            the flags argument passed in.

     COPYFILE_EXCL          Fail if the to file already exists.  (This is only
                            applicable for the copyfile() function.)

     COPYFILE_NOFOLLOW_SRC  Do not follow the from file, if it is a symbolic
                            link.  (This is only applicable for the copyfile()

     COPYFILE_NOFOLLOW_DST  Do not follow the to file, if it is a symbolic
                            link.  (This is only applicable for the copyfile()

     COPYFILE_MOVE          Unlink (remove) the from file.  (This is only
                            applicable for the copyfile() function.)

     COPYFILE_UNLINK        Unlink the to file before starting.  (This is only
                            applicable for the copyfile() function.)

     COPYFILE_NOFOLLOW      This is a convenience macro, equivalent to

     The copyfile_state_get() and copyfile_state_set() functions can be used
     to manipulate the copyfile_state_t object returned by
     copyfile_state_alloc().  In both functions, the dst parameter's type
     depends on the flag parameter that is passed in.


     COPYFILE_STATE_DST_FD        Get or set the file descriptor associated
                                  with the source (or destination) file.  If
                                  this has not been initialized yet, the value
                                  will be -2.  The dst (for
                                  copyfile_state_get()) and src (for
                                  copyfile_state_set()) parameters are point-ers pointers
                                  ers to int.


     COPYFILE_STATE_DST_FILENAME  Get or set the filename associated with the
                                  source (or destination) file.  If it has not
                                  been initialized yet, the value will be
                                  NULL.  For copyfile_state_set(), the src
                                  parameter is a pointer to a C string (i.e.,
                                  char* ); copyfile_state_set() makes a pri-vate private
                                  vate copy of this string.  For
                                  copyfile_state_get() function, the dst
                                  parameter is a pointer to a pointer to a C
                                  string (i.e., char** ); the returned value
                                  is a pointer to the state 's copy, and must
                                  not be modified or released.

     COPYFILE_STATE_QUARANTINE    Get or set the quarantine information with
                                  the source file.  The src parameter is a
                                  pointer to a qtn_file_t object (see
                                  <quarantine.h> ). In the case of
                                  COPYFILE_STATE_SET, the object is cloned; in
                                  the case of COPYFILE_STATE_GET, the object
                                  is simply returned, and it is up to the
                                  caller to clone it if desired.

     Except when given the COPYFILE_CHECK flag, copyfile() and fcopyfile()
     return less than 0 on error, and 0 on success.  All of the other func-tions functions
     tions return 0 on success, and less than 0 on error.

     copyfile() and fcopyfile() will fail if:

     [EINVAL]           Either the from or to parameter was a NULL pointer (
                        copyfile(),) or a negative number ( fcopyfile().)

     [ENOMEM]           A memory allocation failed.

     [ENOTSUP]          The source file was not a directory, symbolic link, or
                        regular file.
     In addition, both functions may set errno via an underlying library or
     system call.

           /* Initialize a state variable */
           copyfile_state_t s;
           s = copyfile_state_alloc();
           /* Copy the data and extended attributes of one file to another */
           copyfile("/tmp/f1", "/tmp/f2", s, COPYFILE_DATA | COPYFILE_XATTR);
           /* Convert a file to an AppleDouble file for serialization */
           copyfile("/tmp/f2", "/tmp/tmpfile", NULL, COPYFILE_ALL | COPYFILE_PACK);
           /* Release the state variable */
           /* A more complex way to call copyfile() */
           s = copyfile_state_alloc();
           copyfile_state_set(s, COPYFILE_STATE_SRC_FILENAME, "/tmp/foo");
           /* One of src or dst must be set... rest can come from the state */
           copyfile(NULL, "/tmp/bar", s, COPYFILE_ALL);
           /* Now copy the same source file to another destination file */
           copyfile(NULL, "/tmp/car", s, COPYFILE_ALL);

     Both copyfile() functions lack a way to set the input or output block

     The copyfile() API was introduced in Mac OS X 10.5.

BSD                             April 27, 2006                             BSD