Я хочу запустить небольшой скрипт оболочки 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, как операционные системы?
Вы пробовали читать руководство? – melpomene
Посмотрите на http://stackoverflow.com/questions/10931134/return-value-of-system-function-call-in-c-used-to-run-a-python-program – pcarter
От http: // ru. cppreference.com/w/cpp/utility/program/system: возвращаемое значение определяется реализацией. – vsoftco