#c
#c
Вопрос:
У меня есть программа на C , которая в основном используется для обработки видео. Внутри программы я запускаю system
команду для того, чтобы получить передачу обработанных видеороликов в некоторые другие двоичные файлы для их последующей обработки.
У меня цикл while стремится к бесконечности, и я каждый раз запускаю системную команду внутри цикла. Дело в том, что в определенный момент я получаю код возврата -1 от system
команды. Что может быть причиной этого?
Внутри системной команды я просто вызываю двоичный файл с соответствующими параметрами из основного проекта.
system
Команда, которую я хочу выполнить, на самом деле является файлом оболочки. В этом файле я извлекаю основные функции из видео и пропускаю их через SVM-модель из сторонней библиотеки 3D, чтобы получить желаемую классификацию.
./LiveGestureKernel ./Video ./SvmVideo
./mat4libsvm31 -l SvmVideoLabels < SvmVideo > temp_test_file
./svm-predict temp_test_file svm_model temp_output_file
cat < temp_output_file
rm -f temp_*
После определенного количества итераций в цикле while файл сценария просто не будет выполняться, и я не могу понять причину этого. Спасибо!
Комментарии:
1. Это зависит от вашей среды, но может быть, что выполняемая вами программа возвращает значение -1
2. Код возврата зависит от того, что вы выполняете. Нам нужно больше информации.
3. Вы пробовали искать информацию о
system
вызове библиотеки?4. Запускаете ли вы эти команды постобработки с помощью
amp;
, чтобы они выполнялись в фоновом режиме? Возможно, у вас заканчиваются процессы.
Ответ №1:
Если вы получите -1
результат вызова system()
, вам следует сначала изучить содержимое errno
— это, скорее всего, подскажет вам, в чем заключается ваша конкретная проблема.
Единственное, на что следует обратить внимание, это то, что возвращаемое значение из system
определяется реализацией в случае, когда вы передаете ему ненулевую команду, поэтому возможно, что -1
это может исходить из вашего реального исполняемого файла.
В этом случае лучше всего распечатать (или иным образом записать в журнал) команду, выполняемую при сбое (и, возможно, все время), чтобы вы могли проверить, что происходит с теми же аргументами, когда вы выполняете ее непосредственно из командной строки или командной оболочки.