2015-10-23 4 views
4

Я хочу запустить небольшой скрипт оболочки UNIX внутри моей программы на C++ и хочу захватить код выхода скрипта оболочки. Но значение, возвращаемое станд :: системы не то, что я ожидаю, что это будет:C++: Почему std :: system ("exit 1") возвращает 256?

#include <iostream> 
#include <cstdlib> 

int main() 
{ 
    std::cout << std::system("echo Hello >/dev/null") << std::endl; 
    std::cout << std::system("which does_not_exisit 2>/dev/null") << std::endl; 

    std::cout << std::system("exit 0") << std::endl; 
    std::cout << std::system("exit 1") << std::endl; 
    std::cout << std::system("exit 2") << std::endl; 
    std::cout << std::system("exit 3") << std::endl; 
    std::cout << std::system("echo exit 4 | bash") << std::endl; 

    return 0; 
} 

На моей коробке Linux это производит:

0 
256 
0 
256 
512 
768 
1024 

Похоже, что все коды выхода больше, чем 0 умножаются на 256. В чем причина такого поведения? Является ли это переносной в UNIX, как операционные системы?

+2

Вы пробовали читать руководство? – melpomene

+2

Посмотрите на http://stackoverflow.com/questions/10931134/return-value-of-system-function-call-in-c-used-to-run-a-python-program – pcarter

+0

От http: // ru. cppreference.com/w/cpp/utility/program/system: возвращаемое значение определяется реализацией. – vsoftco

ответ

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