webinside
@webinside

Запуск бинарник из программы на C?

Пишу программу под малинку на С (WiringPi)
Подключена камера по CSI, доступ через либу raspistill
в консоле все работает:
$ raspistill -o image.jpg -w 800 -h 600 -t 200 - OK
с железом порядок.
в программе через
system("raspistill -o image.jpg -w 800 -h 600 -t 200");

тоже все работает, но программа, что понятно, виснет до выполнения команды.
Как посадить выполнение raspistill как процесс, что бы программа не висла?
Пробую через exec, не выходит. Ошибка. Как правильно передать параметры?
exec("raspistill", ???);
exec("raspistill -o image.jpg -w 800 -h 600 -t 200", ???);

или вообще нужно по другому, С знаю очень плохо.
Помогите =(
  • Вопрос задан
  • 166 просмотров
Решения вопроса 1
leahch
@leahch
3Д специалист. Долго, Дорого, Дерьмово.
Чтобы программа выполнялась параллельно, нужно создать копию своего процесса через fork() или vfork() и уже в порожденном процессе выполнить exec(). Параметры передаются массивом строк или отдельными параметрами с завершающим нулем..
...
if (fork() == 0) { // разделиться
    execl("raspistill", "raspistill", "-o", "image.jpg", "-w" ,"800", "-h", "600", "-t", "200" , "echo", "this is", (char *) 0); // заменить процесс
     perror("exec one failed"); // если что-то пошло не так, выдать ошибку
     exit(1); // здесь завершаем новый процесс, если не отработал execl
}
// здесь продолжение старого процесса 
...
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
wisgest
@wisgest
Не ИТ-специалист
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы