2012-03-27 2 views
1

Я действительно новичок в C++, и я пытаюсь получить вывод:Как получить возвращаемое значение execv?

execv("./rdesktop",NULL); 

Я программирования на C++ и на RHEL 6.

Как клиент FTP, я хотел бы получить все статус обновляется из моей внешней запущенной программы. Может кто-нибудь, пожалуйста, скажите мне, как я могу это сделать?

+3

Возвращаемое значение (например, результат выхода() или аналогичный) или выход (т. Е. Stdout/stderr)? В названии вопроса указано одно, но ваш вопрос другой :-) –

+5

Я не уверен, что вы понимаете, что делает 'execv'; он ** заменяет ** ваш процесс указанным процессом. Ваш процесс больше не существует, поэтому делать захват нечего! –

+2

'execv' возвращает только в случае отказа. –

ответ

1

Вы можете проверить статус выхода дочернего процесса, позвонив по телефону wait, waitpid, wait3 или wait4.

#include <sys/types.h> 
#include <sys/wait.h> 
#include <unistd.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main() { 
    pid_t pid = fork(); 
    switch(pid) { 
    case 0: 
    // We are the child process 
    execl("/bin/ls", "ls", NULL); 

    // If we get here, something is wrong. 
    perror("/bin/ls"); 
    exit(255); 
    default: 
    // We are the parent process 
    { 
     int status; 
     if(waitpid(pid, &status, 0) < 0) { 
     perror("wait"); 
     exit(254); 
     } 
     if(WIFEXITED(status)) { 
     printf("Process %d returned %d\n", pid, WEXITSTATUS(status)); 
     exit(WEXITSTATUS(status)); 
     } 
     if(WIFSIGNALED(status)) { 
     printf("Process %d killed: signal %d%s\n", 
      pid, WTERMSIG(status), 
      WCOREDUMP(status) ? " - core dumped" : ""); 
     exit(1); 
     } 
    } 
    case -1: 
    // fork failed 
    perror("fork"); 
    exit(1); 
    } 
} 
4

execvзаменяет текущий процесс, поэтому сразу после его выполнения, что выполнение будет любой исполняемый файл с заданными параметрами.

Обычно вы делаете fork, а затем execv только в дочернем процессе. Родительский процесс получает PID нового ребенка, который он может использовать для контроля выполнения ребенка.

 Смежные вопросы

  • Нет связанных вопросов^_^