На мой взгляд, функция системы всегда следует избегать: это ненадежно, так как вы не знаете, что оболочка будет обрабатывать ваша команда, и у нее нет средств, чтобы вернуть вам однозначный код ошибки. Более того, на таких платформах, как Windows, где процессы имеют довольно тяжелый вес, не рекомендуется запускать новый процесс только для запуска другого, и, кстати, некоторые комплекты безопасности могут выдавать предупреждение для каждого процесса, которое приложение пытается запустить, и удвоение этого уведомления (один для командного интерпретатора, один для фактически запущенного приложения) может вдвойне раздражать пользователя.
Если вам просто нужно создать новый процесс, вы можете просто создать свою функцию обертки вокруг фактического кода для конкретной платформы, который будет автоматически выбран, когда программа будет скомпилирована благодаря препроцессору. Что-то вроде этого:
int CreateProcess(const char * Executable, const char * CommandLine)
{
#if defined (_WIN32)
return CreateProcess(Executable, CommandLine /* blah blah blah */)!=FALSE;
#elif defined (_POSIX)
/* put here all the usual fork+exec stuff */
#else
#error The CreateProcess function is not defined for the current platform.
#endif
}
Кстати, эта функция может быть расширено легко блокировать, вы можете просто добавить флаг (INT Blocking, или что-то в настоящее время используется в C99 для булевых), инициирующих WaitForSingleObject для секции win32 и waitpid для раздела POSIX.
Он открывает командную строку и выполняет там команду. Мне нужно подождать, пока он закончит, прежде чем продолжать делать что-то, поэтому я думаю, что это не устраивает мои нужды. Спасибо, в любом случае! – Jeff
@Jeff - system() синхронно. Ваш pgm будет ждать, пока он не будет завершен. – Duck