2015-03-02 5 views
0

Я хочу запустить системную функцию в программе, написанной на 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. К сожалению, из-за сочетания смутно сформированного вопроса и смены сферы я перефразировал этот вопрос здесь.

ответ

0

Функция, которую вы ищете, это система (3). Вы получите код выхода процесса назад. Но если вы намерены прочитать вывод (stdout) вызываемого процесса, вам нужно реализовать комбинацию fork (3)/exec (3), повторно подключив дескрипторы файла ребенка (по крайней мере, fd 1), а затем прочитав из него.

+0

Проблема заключается в том, что функция не выводит EOL или EOF, поэтому STDOUT буферизуется до тех пор, пока не получит этот символ до того, как STDIN сможет его прочитать. –

+0

Stdout размывается, как только появляется EOL ('\ n'). EOF не является символом. Он обнаруживается чтением (2), которое возвращает 0 в этом случае. – Bernhard

Смежные вопросы