0
我想在用C编写的程序中运行系统函数。 此系统函数处于阻塞状态,可能需要一些时间才能返回到stdout。被调用的功能是喷鼻息,并且通常作为随后在覆盆子PI执行:执行系统函数并解析输出
sudo snort -q -A console -i eth0 -c /etc/snort/snort.conf
在这种情况下鼻息触发警报,父程序应该读取该行并点亮LED。我目前正在开启LED如下:
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
}
你会如何解决这个问题?我试着监视系统日志,但是snort并没有写入系统日志,因为我找不到任何警报。
fyi:上周我问了这个问题:Execute script on Snort alert。不幸的是,由于模糊的问题和范围的变化,我在这里重新提出了这个问题。
问题是函数不输出EOL或EOF,因此STDOUT被缓存,直到它在STDIN能够读取它之前接收到该字符。 – 2015-03-04 11:28:55
只要有EOL('\ n'),stdout就会被刷新。 EOF不是一个字符。在这种情况下,通过读(2)检测到返回0。 – Bernhard 2015-03-06 07:09:16