Я хочу запустить системную функцию в программе, написанной на C. Эта системная функция блокируется и может занять некоторое время, прежде чем она вернется к стандарту stdout. Функция будет называться этим фырканьем, и обычно выполняется на Raspberry Pi, как следует:Выполнение системных функций и вывод результатов анализа
sudo snort -q -A console -i eth0 -c /etc/snort/snort.conf
В случае фырканье вызывает тревогу, родительская программа должна прочитать эту строку и включить светодиод. В настоящее время я включаю следующие светодиоды:
void triggerLed(void) {
pinMode(7], OUTPUT);
digitalWrite(7, HIGH);
}
int main(void) {
//Execute this function call: sudo snort -q -A console -i eth0 -c /etc/snort/snort.conf
//while executing
//On new line from readline()
//if strcmp(line,"alert")
triggerLed();
//endif
//end while
}
Как бы вы это решили? Я попытался контролировать syslog, snort, однако, не пишет в syslog, поскольку я не могу найти никаких предупреждений.
fyi: На прошлой неделе я задал этот вопрос: Execute script on Snort alert. К сожалению, из-за сочетания смутно сформированного вопроса и смены сферы я перефразировал этот вопрос здесь.
Проблема заключается в том, что функция не выводит EOL или EOF, поэтому STDOUT буферизуется до тех пор, пока не получит этот символ до того, как STDIN сможет его прочитать. –
Stdout размывается, как только появляется EOL ('\ n'). EOF не является символом. Он обнаруживается чтением (2), которое возвращает 0 в этом случае. – Bernhard