Задать вопрос
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", ???);

или вообще нужно по другому, С знаю очень плохо.
Помогите =(
  • Вопрос задан
  • 190 просмотров
Подписаться 2 Средний Комментировать
Помогут разобраться в теме Все курсы
  • Нетология
    Разработчик на C++
    12 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++
    9 месяцев
    Далее
  • Яндекс Практикум
    Разработчик C++ расширенный
    12 месяцев
    Далее
Решения вопроса 1
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Чтобы программа выполнялась параллельно, нужно создать копию своего процесса через 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
Не ИТ-специалист
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
АО НПП «АМЭ» Санкт-Петербург
До 250 000 ₽
Uniscan Research Новосибирск
от 140 000 до 200 000 ₽
Базис-Центр Коломна
от 70 000 до 500 000 ₽