clonefile/main.c
#include <fcntl.h> |
#include <stdio.h> |
#include <stdlib.h> |
#include <unistd.h> |
#include <string.h> |
#include <sys/errno.h> |
#include <copyfile.h> /* for copyfile(3) */ |
#include <sys/clonefile.h> /* for clonefileat(2) */ |
int main(int argc, const char * argv[]) |
{ |
int error; |
int was_cloned; |
copyfile_state_t s; |
if (argc != 3) { |
fprintf(stderr, "usage: %s src_file dst_file ...\n", argv[0]); |
exit(1); |
} |
/* Initailize state */ |
s = copyfile_state_alloc(); |
/* Copy the file (but clone if available) */ |
error = copyfile(argv[1], argv[2], s, COPYFILE_CLONE); |
if (error < 0) { |
perror("Error in copyfile()"); |
exit(1); |
} |
/* Was the file cloned ? */ |
if ((copyfile_state_get(s, COPYFILE_STATE_WAS_CLONED, &was_cloned) == 0) && was_cloned) { |
fprintf(stdout, "File was cloned\n"); |
} else { |
fprintf(stdout, "File was copied and not cloned\n"); |
} |
/* Release the state variable */ |
copyfile_state_free(s); |
/* clone the file, this time using clonefileat(2) instead of copyfile(3) */ |
(void)unlink(argv[2]); |
error = clonefileat(AT_FDCWD, argv[1], AT_FDCWD, argv[2], 0); |
if (error < 0) { |
perror("Error in clonefileat()"); |
exit(1); |
} |
return (0); |
} |
Copyright © 2016 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2016-09-13