Rsync через posix_spawn

0

У меня запущен демон rsync, и я могу успешно выполнить следующую команду:

rsync --port = 1873 -avWh 127.0.0.1::jackfruit_peers/data.0a6/home/v/data

но из кода:

local_dir =/home/v/data

remote_dir = 127.0.0.1::jackfruit_peers/data.0a6

    pid_t child_pid;
    char cmd[] = "rsync -avWh --port=1873";
    char *argv[] = {cmd, remote_dir, local_dir,
                    (char*) 0}; 
    if (0 != posix_spawn(&child_pid, "/usr/bin/rsync", NULL, NULL, argv, environ)) {
        logger::error("posix spawn");
        return ERR_INTERNAL_SERVER_ERROR;
    }   

Я получаю сообщение об ошибке:

rsync: не удалось подключиться к 127.0.0.1 (127.0.0.1): соединение отклонено (111) Ошибка rsync: ошибка в соке IO (код 10) на clientserver.c(128) [Receiver = 3.1.0] 2015-01-16 15: 27: 08.421.732 28623 0x7fbc01914010 INFO Пробуждение родителя, чей ребенок pid = 30060. ERRNO = 0

Любая идея почему?

EDIT: дескриптор rsync определяется как:

 [jackfruit_peers]
    comment = for data transfer
    path = /home/jackfruit/
    read only = yes
    timeout  =  60
Теги:
posix
rsync

1 ответ

0

Изменен в этом уродливом формате, и он работает:

   pid_t child_pid;
    char a1[] = "rsync";
    char a2[] = "-avWh";
    char a3[] = "--port=1873";
    char *argv[] = {a1, a2, a3, remote_dir, local_dir,
                   (char*)0};

    if (0 != posix_spawn(&child_pid, "/usr/bin/rsync", NULL, NULL, argv, environ)) {
        logger::error("posix spawn");
        return ERR_INTERNAL_SERVER_ERROR;
    }   

Я получал устаревшие преобразования строк из const char * в char *, когда я использовал фактические строковые константы вместо a1, a2, a3, и, следовательно, я по-дурацски разбил все на:

char cmd[] = "rsync -avWh --port=1873";

Ещё вопросы

Сообщество Overcoder
Наверх
Меню