1

我正在尝试使用sendfile()来实现复制程序。

但是,当我尝试复制目录时它失败了。目录不是Linux中的特殊文件类型吗?

这是我现在使用的代码。它是从 StackOverflow 的另一个答案中复制而来的。

int copy_file(const char *to, const char *from) {
    int read_fd; int write_fd;
    struct stat stat_buf;
    off_t offset = 0;
    /* Open the input file. */
    read_fd = open(from, O_RDONLY);
    /* Stat the input file to obtain its size. */
    fstat (read_fd, &stat_buf);
    /* Open the output file for writing, with the same permissions as the source file. */
    write_fd = open(to, O_WRONLY | O_CREAT, stat_buf.st_mode);
    /* Blast the bytes from one file to the other. */
    int err = sendfile(write_fd, read_fd, &offset, stat_buf.st_size);
    /* Close up. */
    close (read_fd);
    close (write_fd);
    return err;
}

追加

我得到的返回值为-1。我得到了一个文件,而不是目录,它有to路径。

我正在使用 Ubuntu 12.04,64 位。

的输出uname -r3.11.0-20-generic

4

2 回答 2

0

下面是linux中copy命令的实现。请遵循此。

http://cboard.cprogramming.com/c-programming/143382-implementation-linux-cp-copy-command-c-language.html

于 2014-04-21T06:00:53.927 回答
0

您不能像这样传输目录。虽然从技术上讲,目录确实是某些 Unices 上的一种文件,但它的内容不能移植到另一个文件系统,甚至不能移植到同一文件系统中的另一个目录。由于这个和其他原因,系统不允许您将目录视为另一个文件。

于 2014-04-21T07:19:13.447 回答