как проверить system () результат - PullRequest
2 голосов
/ 20 января 2012

Как мне проверить, была ли системная команда выполнена успешно и она не вернула ошибку? Согласно MSDN Library , существует несколько случаев. Я не мог быть уверен, что следующий фрагмент верен.

char buffer[100];
int ret_val;
strcpy(buffer, "copy *.txt ");
strcat(buffer, path);
ret_val = system(buffer);
if(0 != ret_val)
{
  perror("There was an error");
}
else
{
  printf("The command was run successfully.");
}

Возвращаемое значение

Если команда NULL и интерпретатор команд найден, возвращает ненулевое значение. Если интерпретатор команд не найден, возвращает 0 и устанавливает для errno значение ENOENT. Если команда не NULL, система возвращает значение, которое возвращается интерпретатором команд. Он возвращает значение 0 только в том случае, если интерпретатор команд возвращает значение 0. Возвращаемое значение - 1 указывает на ошибку, и для errno установлено одно из следующих значений:

Ответы [ 2 ]

1 голос
/ 20 января 2012

Чтобы отследить все случаи, вам также нужно проверить errno, как указано в документации:

if (ret_val == 0 && errno == 0)
{
  printf("success!\n");
}

Убедитесь, что вы также очистите errno непосредственно перед вызовом system().

0 голосов
/ 20 января 2012

Поскольку аргумент system не равен NULL, вы концентрируетесь на этом очень простом случае: -1 - это ошибка функции system, иначе код возврата фактической команды.

...