Запуск шеллскрипта из приложения C ++ и проверка его успешности - PullRequest
1 голос
/ 24 мая 2010

Я создаю интерпретатор для моего расширения HQ9 +, в котором есть следующая дополнительная команда V:

V: интерпретирует код как Lua, Brainfuck, INTERCAL, Ruby, ShellScript, Perl, Python, PHP в указанном порядке, и если хотя бы одна ошибка произошла, снова запустите код HQ9 + -ABC

У большинства из них есть библиотеки, BF и INTERCAL могут интерпретироваться без библиотеки, но проблема заключается в ShellScript. Как я могу запустить скрипт из моего приложения C ++ (= интерпретатор HQ9 + -ABC) и, когда это будет сделано, получить код ошибки (0 = выполнено, все остальные = не удалось)? Так что-то вроде этого:

system(".tempshellscript738319939474");
if(errcode != 0) { (rerun code); }

Кто-нибудь может мне помочь? Спасибо

Ответы [ 3 ]

2 голосов
/ 24 мая 2010

С man system(3):

    RETURN VALUE
       The value returned is -1 on error (e.g. fork failed),  and  the  return
       status  of  the command otherwise.  This latter return status is in the
       format specified in wait(2).  Thus, the exit code of the  command  will
       be  WEXITSTATUS(status).   In  case  /bin/sh could not be executed, the
       exit status will be that of a command that does exit(127).
1 голос
/ 24 мая 2010

system () возвращает код в зависимости от успеха или неудачи того, что вы вызвали.

http://www.cplusplus.com/reference/clibrary/cstdlib/system

0 голосов
/ 24 мая 2010

Я помню, execve вызывал работу для сценариев оболочки, у которых #! interpreter было в первой строке для назначения в университете. Если вы используете system, попробуйте также execve. wait на pid скрипта может помочь получить статус выхода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...