2015-05-07 4 views
0

Мне нужно передать 1 значение между программами. В моем случае я запускаю (ОЧЕНЬ ПРОСТОЙ) программу в другую, вызывая систему («SimpleProgram»).Как получить пользовательское возвращаемое значение из системы()

Есть ли способ передать 1 значение (целое число), возвращенное SimpleProgram. Ни «return 123», ни «exit (123)» не работают.

Есть ли какой-либо элегантный способ передать такое значение? (Я не хочу писать и читать внешний файл)

EDIT:

Язык C++, программирование выполняется на BeagleBone с распределением ангстрем.

retCode = система ("cd/home/martin/uart/temp/xml_parser & & ./xmldom");

+0

На каком языке вы владеете? Можете ли вы показать нам какой-то код? – NaN

ответ

1

Обратите внимание, что страница человека для system(3) говорит о коде возврата:

Возвращаемое значение -1 в случае ошибки (например, вилка (2) не удалось), а также статус возвращения команды в противном случае. Этот последний статус возврата находится в формате, указанном в ожидании (2). Таким образом, код выхода команды будет быть WEXITSTATUS (статус).

Итак, вы почти у цели. Если у вас есть простая программа, которая возвращает 123, как вы говорилось:

int main(int argc, char **argv) { 
    return 123; 
} 

, то вы можете запустить его с system(3) и увидеть его код возврата с помощью WEXITSTATUS():

#include <iostream> 
using namespace std; 

#include <stdlib.h> 

int main(int argc, char **argv) { 
    int rc = system(argv[1]); 
    cout << WEXITSTATUS(rc) << '\n'; 
} 

Назвав первую программу return123 и второй system:

$ ./system ./return123 
123 

Если вы опустите в WEXITSTATUS() и просто распечатать rc, вы получите неправильное значение.

+0

Кроме этого, вероятно, нельзя использовать. Возвращаемые значения находятся только в диапазоне 0-255, поэтому это уже мало. Часть этого диапазона обозначает стандартные ошибки, поэтому, если юридическое значение также соответствует коду ошибки, вы должны делать дерьмовые танцы с отменой всех значений, но, возможно, вы не можете. Я настоятельно рекомендую, чтобы op читал manpages лучше, знакомится с popen (3) и вместо этого делает инструмент для печати. –

+0

Ну, ОП сказал, что это все, что ему нужно - передать значение выхода из простой команды обратно в invoker. Иногда это все, что вам нужно. –

+0

У ОП была странная проблема с использованием системы (3). Нужно предположить, что он не знал ограничения диапазона и не рассматривал перекрытие ошибок/валов. –

0

Стандартный способ сделать это с помощью труб UNIX.

Если это всего лишь взлома, вы можете просто использовать двоичное возвращаемое значение, но в любом случае вам придется использовать execve() вместо system().

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