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


Автор: Ytkonos 1.12.2011, 11:50
Есть рабочий код. 
Задание:
Составить программу cpr ,  осуществляющую рекурсивное копирование поддерева файловой  системы  OC  UNIX. Программа cpr  должна  вызываться на выполнение в соответствие со следующим синтаксисом:
cpr имя_дир_1 имя_дир_2,
где имя_дир_1 -  имя  директории,  служащее  корнем поддерева файлов, подлежащего копированию; имя_дир_2 - имя директории, в которую должно быть скопировано поддерево. 
Замечание. На  языке оболочки OC UNIX эта задача решается с помощью конвейера из трех команд:
tar cf - ?имя_дир_1? | (cd ?имя_дир_2? ; tar xf -)

Код

­#include <unistd.h>
#include <errno.h>
#include <stdio.h>
#include <string.h>

int main(int argc,char *argv[])
{
    if(access(argv[1], F_OK) || access(argv[2], F_OK))
    {
        fprintf(stderr,"Error access: %s\n", strerror(errno));
        return 1;
        }
    
    int fds[2];
    pipe (fds);
    if(fork())
    { // РєРѕРґ отца
        dup2(fds[1],1);
        close(fds[0]);
        close(fds[1]);
        if(execl("/bin/tar", "tar", "cf", "-", argv[1], NULL) == -1)
            perror("execl tar");
    }
    else
    {
        dup2(fds[0],0);
        close(fds[0]);
        close(fds[1]);
        char buf[1024];
        buf[0] = '\0';
        strcat(buf, "cd ");
        strcat(buf, argv[2]);
        strcat(buf, " ; tar xf -");
        //fprintf(stderr, "Generated string: %s\n", buf);
        if(execl("/bin/sh", "sh", "-c", buf, NULL) == -1)
            perror("execl sh");
    }
    
    return 0;
}



Но при копировании вылезает ошибка, что такой то файл не скопирован, не хватает прав. Нужно сделать, что такая ошибка не вылезала. Какой командой можно так сделать?

Автор: bsa 1.12.2011, 12:08
cp -fR src_dir dst_dir >/dev/null 2>&1

Автор: feodorv 4.12.2011, 02:42
Схема с tar'ом устрашает...
Цитата(Ytkonos @  1.12.2011,  11:50 Найти цитируемый пост)
Но при копировании вылезает ошибка, что такой то файл не скопирован, не хватает прав.

А если копировать с правами "root"?

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