LinuxForum.Fans
Тема

popen & ftp, чтение ответов сервера

Автор: Vlad_Imir 5 сообщений 2550 просмотров
#161124

Мне надо контролировать Ftp процесс.

text

FILE    *command_pipe = popen("ftp -i -n -v 10.85.43.26", "w");
// здесь проверить - был ли успешный коннект

fprintf(command_pipe, "user %s %s\n", account, auth); // была ли успешна идентификация

// итд fprintf(command_pipe, "hash 1048576\n"); fprintf(command_pipe, "bin\n"); fprintf(command_pipe, "cd %s\n", path); fprintf(command_pipe, "put %s\n", ftp_file.c_str()); fprintf(command_pipe, "quit\n");

Я пытался читать ответы сервера (на терминале отображаются) путем использования
fscanf, fgets, getline, но всегда буфер оказывался пустой

Как прочесть ответы сервера?

Red Hat Enterprise Linux Server release 5.6 (Tikanga)

#163291

Перенёс в раздел Программирование.

#163338

Насколько понимаю проблема в том, что файл открыт на запись
http://www.linuxlib.ru/manpages/POPEN.3.shtml

Если режим равен "w", то можно писать на стандартный ввод команды, выводя в созданный поток. Если режим равен "r", то можно читать со стандартного вывода команды, вводя из созданного потока.

1. Типичным является следующий пример:

text

          char *cmd = "ls *.c";
          FILE *ptr;
          if ((ptr = popen (cmd, "r")) != NULL)
            while (fgets (buf, n, ptr)) != NULL)
              (void) printf ("%s", buf);

На стандартный вывод будут записаны имена всех файлов с расширением .c, принадлежащих текущему каталогу.

(http://www.linux.org.ru/forum/development/1413419)

#163491

Если режим равен "w", то можно писать на стандартный ввод команды, выводя в созданный поток

Не могли бы пару строчек кода для моего случая.

#163531
Vlad_Imir написал:
Если режим равен "w", то можно писать на стандартный ввод команды, выводя в созданный поток

Не могли бы пару строчек кода для моего случая.

У меня такой задачи не возникало :)

Первый вариант: http://www.opennet.ru/openforum/vsluhforumID9/4675.html, http://www.feep.net/fget

Второй вариант: http://www.opennet.ru/man.shtml?topic=popen&category=3&russian=1

The type argument is a pointer to a null-terminated string which must be `r' for reading, `w' for writing, or `r+' for reading and writing.

Попробуйте указать тип r+.

Войдите или зарегистрируйтесь, чтобы ответить.