执行系统功能和解析输出

时间:2015-03-02 11:50:01

标签: c pipe raspberry-pi

我想在用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。不幸的是,由于结合了一个模糊的问题和范围的变化,我在这里重新提出了这个问题。

1 个答案:

答案 0 :(得分:0)

您正在寻找的功能是system(3)。您将获得该进程的退出代码。 但是,如果您打算读取被调用进程的输出(stdout),则必须实现fork(3)/ exec(3)组合,重新连接子文件的描述符(至少为fd 1),然后从中读取。