В чем разница между вышеуказанными способами выполнения команды и приведенным ниже кодом? #include int main ( ) { int return_value; return_value = system ( "ls /" ); return return_value; }

1 ответ1

0

system("ls /") создаст процесс sh , передав ему аргументы -c и ls / . Таким образом, основное различие между запуском вашей программы и вводом sh -c "ls /" в оболочке состоит в том, что в первом случае также существует процесс, содержащий вашу программу. Так что, если бы вы могли захватить дерево процессов во время работы ls , вы бы увидели что-то вроде этого:

init───konsole───bash───myprog───sh───ls

вместо

init───konsole───bash───sh───ls

Если вы используете одну из функций семейства exec , вы можете вообще отказаться от использования sh и заменить свою программу утилитой ls . В этом случае вы увидите:

init───konsole───bash───ls

Программа может выглядеть так:

int main(int argc, char** argv) {
  return execlp("ls", "ls", "/");
}

Многие оболочки, включая bash будут делать это автоматически, если команда, выполняемая с помощью параметра -c является простой командой. Тем не менее , нет смысла порождая оболочки с целью замены оболочки с процессом , который вы могли бы просто exec

Существует очень небольшая разница между sh -c "ls -l" и sh ls-l.sh , за исключением того, что необходимо для открытия файла для чтения.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .