2013-07-11 5 views

ответ

4

Поскольку

system() выполняет команду, указанную в команды по телефону /bin/sh -ccommand и возвращается после того, как команда была завершена.

Таким образом, каждая команда выполняется независимо, каждый в новом экземпляре оболочки.

Итак, ваш первый звонок порождает новый sh (с вашим текущим рабочим каталогом), меняет каталоги, а затем выходит. Затем второй вызов порождает новый sh (снова в вашем CWD).

См. man page for system().


Лучшим решением является to not use system. У этого есть некоторые присущие недостатки, которые могут оставить вас уязвимыми для безопасности. Вместо выполнения команд system() вы должны использовать эквивалентные функции POSIX C. Все, что вы можете сделать из командной строки, вы можете сделать с функциями C (как вы думаете, что эти утилиты работают?)

  • Вместо system("rm -rf ...") использования this.
  • Вместо system("cd ...")chdir().
  • Вместо system("pwd ...")getcwd().

Есть, конечно, некоторые различия, но это основные эквиваленты того, что вы пытаетесь сделать.

+0

Спасибо, это будет огромной помощью. Время для чтения ... – HenryRootTwo

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