Я пытаюсь использовать 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 -r является 3.11.0-20-generic.

1
Ply_py 21 Апр 2014 в 09:54

2 ответа

Лучший ответ

Вы не можете передать такой каталог. Хотя технически верно, что каталог является своего рода файлом в некоторых Unix, его содержимое не переносится в другую файловую систему или даже в другой каталог в той же файловой системе. По этой и другим причинам система не позволит вам рассматривать каталог как просто другой файл.

0
tripleee 21 Апр 2014 в 07:19

Вот реализация команды копирования в Linux. Пожалуйста, следите за этим.

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

0
Chaithra 21 Апр 2014 в 06:00