У меня проблема с кодом C, в основном мне нужно отправить электронное письмо через программу mutt. Он должен быть отправлен, когда прерывание появляется из выводов GPIO. Моя функция sendMail указана ниже. Я понял это с помощью системы функции. Main содержит цикл с функцией logAlarm, который содержит sendMail. Дело в том, что система (cmd) функция отделки, вся программа C останавливается. Например, когда я помещал функцию sendMail в начале основной, она работает и отправляет электронную почту на мой почтовый ящик, не останавливая всю программу, в цикле, которую ему удается отправить, но она завершает программу. Я попытался использовать знак &, чтобы запустить его в фоновом режиме, но он не помог.Программа C прервана во время выполнения функции «system»
P.S Я не знаю, если это имеет значение, но im также использует системный вызов от setitimer с интервалом в 2 секунды, чтобы проверить несколько вещей, но я думаю, что это не влияет на этот случай.
Любые идеи?
Заранее спасибо :)
функции Sendmail:
void sendMail(char * msg, char * recipientMail){
char cmd[100];
char subject[30];
char body[60];
sprintf(body, "Intruder detected!!!\n%s", msg);
strcpy(subject, "\"ALARM - SECURITY BREACH\"");
sprintf(cmd,"echo \"%s\" | mutt -s %s %s &", body, subject, recipientMail);
printf("%s\n\n", cmd);
system(cmd);
}
Вот кусок моей главной функции:
while(1){
sleep(1);
if(prev_state == triggered && !emailDetach){
if(!logAlarm()){
printf("Error writing to log file!!!\n");
}
emailDetach = true;
}
//printf("Czas od poprzedniego alarmu: %d", millis() - alarmTriggeredTime);
if((prev_state == triggered) && (millis() - alarmTriggeredTime >= ALARM_TIME)){
digitalWrite(ALARM_ON_DIODE, LOW);
digitalWrite(ALARM_OFF_DIODE, HIGH);
//warunek czasowy osobno na syrene TODO
if(!silentMode && (millis() - alarmTriggeredTime >= siren_alarm_time)){
digitalWrite(SIREN, LOW);
}
prev_state = nottriggered;
}
}
Что рассчитывает отладчик? Где он точно останавливается? См. [Ask] и укажите [mcve]. – Olaf
system() синхронно, поэтому sendmail() не вернется, пока не закончится cmd. – Marichyasana
благодарит @Olaf за использование отладчика: D. Это очень помогло, это была вина SIGSEGV. В одном случае переменная cmd была маленькой, и программа была сбойной. Благодаря! – Orzechix