Эта программа работает, как и ожидалось для меня:
int main()
{
int ret = system("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
использование -i вызывает некоторую проблему перенаправления, и все зависает, как только я набираю команду, которая выводит данные.
Существуют важные различия между system () и exec () . system () фактически совпадает с /bin/sh -c yourCommand
в командной строке, поэтому system("/bin/sh")
совпадает с
/bin/sh -c /bin/sh
Вот почему он используется редко, потому что требуемая команда выполняется при первом запуске ненужного процесса оболочки.
exec () вызывает замену всего образа процесса на указанную команду, поэтому, если бы я написал:
int main()
{
int ret = exec("/bin/sh");
printf ("Shell returned %d\n", ret);
return 0;
}
printf () и все после него никогда не будет выполнено, потому что весь процесс преобразуется в экземпляр / bin / sh . Правильный способ выполнить дочернюю команду - это разветвить, а затем выполнить exec в дочернем элементе и ждать в родительском.