你能在程序中省略 netstat 调用的初始消息吗

Can you omit initial message on netstat call in program

在调用 system("netstat -ltnp -a | grep ./server"); 时是否可以省略前两行?

我不希望我的程序读取“(并非所有进程都可以被识别,非拥有的进程信息 不会显示,您必须是 root 才能看到所有内容。)"

(Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.)
tcp        0      0 0.0.0.0:8091            0.0.0.0:*               LISTEN      109392/./server     
tcp        0      0 127.0.0.1:8101          127.0.0.1:57114         ESTABLISHED 108863/./server     
tcp        0      0 127.0.0.1:41238         127.0.0.1:8091          ESTABLISHED 109397/./client     
tcp        0      0 127.0.0.1:8091          127.0.0.1:41238         ESTABLISHED 109392/./server     
tcp        0      0 127.0.0.1:57114         127.0.0.1:8101          ESTABLISHED 108865/./client

简单的解决方案是将 grep 替换为例如sed 或者 Awk,它很容易让你添加这样的约束。

system("netstat -ltnp -a | sed -e '1,2d' -e '\%./server%'");

(正确来说,点也应该反斜杠。)

对于任何更复杂的事情,或许可以为 netstat 输出创建一个解析器(and/or 看看你是否可以让它以 well-defined machine-readable 格式发出结果).

不过,您确定此警告消息打印在标准输出上吗?任何 well-behaved Unix 实用程序都应该将诊断消息发送到标准错误,而不是标准输出。简单的解决方案是将标准错误重定向到 /dev/null.