1 (12.05.2011 15:52:12 отредактировано Vlad_Imir)

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

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)

2

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

3

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

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

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

          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)

4

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

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

5

Vlad_Imir пишет:

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

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

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

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

Второй вариант: http://www.opennet.ru/man.shtml?topic=p … ;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+.