Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Копирование файла


Автор: CPlusPlusFAN 17.11.2008, 05:30
Искал подобную тему. Но так и не нашёл. Хотя где-то на просторах инета 1 раз на неё натыкался.

Необходимо, не используя утилиту cp, без Qt, boost скопировать файл, естественно с возможностью присвоения нового имени. Не предлагать юзать fread/fwrite. Помнится мне там надо было получить дескриптор сорс файла, открытием его на чтение, дескриптор дест файла, созданием его и открытием для записи. Затем выполнялась какая-то функция, аргументами которой были эти 2 дескриптора. Затем, естественно, файлы закрывались.

ЗЫ Поиск по форуму ничего не дал. Также роюсь в нете уже несколько часов и никак не найду.

Автор: MAKCim 17.11.2008, 09:23
CPlusPlusFAN, 
man 2 sendfile

Автор: GrayCardinal 19.11.2008, 11:15
MAKCim, 
Не пройдет smile Второй дескриптор должен быть подключенным сокетом smile

Автор: MAKCim 19.11.2008, 12:03
GrayCardinal, 
не обязательно
ты уверен, что обработчик sendfile в структуре file_operations не реализован во всех ФС?

Автор: GrayCardinal 20.11.2008, 12:47
MAKCim, 
Я уверен что сендфайл кидает ошибку если тама не сокет smile

Добавлено через 1 минуту и 21 секунду
А вот tee(2) должен подойти smile

Автор: inside_pointer 24.11.2008, 12:06
Код


#include <stdio.h>
 
/* filecopy:  копирование файла ifp в файл ofp */
void filecopy(FILE *ifp, FILE *ofp)
{
    int c;
    
    while ((c = getc(ifp)) != EOF)
        putc(c, ofp);
}


не дескрипторы конечно

для дескрипторов используются системные вызовы

эту сам писал
Код

 
#include <stdio.h>
#include "syscall.h" 
 
/* filecopy:  копирование файла ifd в файл ofd */
void filecopy(int *ifd, int *ofd)
{
    char buf[BUFSIZ];
    int n;
    
    while ((n = read(ifd, buf, sizeof buf)) > 0 && write(ofd, buf, n) == n)
        ;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)