我想在用C编写的程序中运行系统函数。 此系统函数是阻塞的,并且可能需要一些时间才能返回到stdout。要调用的函数是snort,通常在覆盆子pi上执行,如下所示:
sudo snort -q -A console -i eth0 -c /etc/snort/snort.conf
在snort触发警报的情况下,父程序应该读取该行并打开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
}
你会如何解决这个问题?我试过监视syslog,然后snort没有写入syslog,因为我找不到任何警报。
fyi:上周我问过这个问题:Execute script on Snort alert。不幸的是,由于结合了一个模糊的问题和范围的变化,我在这里重新提出了这个问题。
答案 0 :(得分:0)
您正在寻找的功能是system(3)。您将获得该进程的退出代码。 但是,如果您打算读取被调用进程的输出(stdout),则必须实现fork(3)/ exec(3)组合,重新连接子文件的描述符(至少为fd 1),然后从中读取。