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


Автор: Step 15.9.2005, 02:38
из проги на с выполнить внешнюю команду например ping vingrad.ru
и получить то что она вывела

выполнить понятно как, а вот как выполнить что бы и ответ ее получить не понятно


Автор: chaos 15.9.2005, 05:50
в QT есть функция типо StartProcess(точно не помню) с помощью нее можно получить результат, но наверное тебя такое решение не устраивает)
Потом можно перенаправить вывод в файл и читать уже файл
Ну и 3 вариант самый правельный создать пайпы и связать их с STDOUT, STDIN, STDERR запускаемого приложения

Автор: Step 15.9.2005, 09:39
про третий варинт подробнее можно

Автор: chaos 15.9.2005, 12:20
а вот глянь черкнул тебе примерчик
Код

#include <stdio.h>
#include <unistd.h>

int main ()
{
    int fifo[2], status;

    pid_t child_pid;
    char buf[80];
    
    if (-1 == pipe(fifo)) printf("Error create pipe\n"), exit(0);

    switch (child_pid = fork())
    {
    case -1:
    {
        printf("error");
        exit(0);
    }
        
    case 0: //child process
    {
            //перенаправляем STDOUT ребенка STDIN родителя
            if (dup2 (fifo[1], STDOUT_FILENO) == -1) 
            {
                printf("error dup2");
                exit(0);
            }
        
            close(fifo[0]);
            close(fifo[1]);

            execlp ("ping", "ping", "-c 5", "vingrad.ru", NULL);
            perror("execlp");
 
            exit(0);
        }
    }

    close(fifo[1]);
    
    while (read (fifo[0], buf, 80))
        printf (buf);
    
    close(fifo[0]);
    if (waitpid(child_pid, &status, 0) == child_pid)    
        return 0;
    
    return 0;
}

Добавлено @ 12:27
ну компилять как обычно
gcc -s -o redirect.bin redirect.c
Добавлено @ 12:28
не забывай про расширение smile

Автор: chaos 15.9.2005, 13:06
все проверено, все работет smile

Автор: Step 15.9.2005, 23:30
сенкс буду разбираться

Автор: Guest 19.9.2005, 01:02
popen/pclose рулит.

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