c - 使用 popen 时静默 tcpdump 的输出

标签 c popen stderr tcpdump silent

我正在用 C 编写一个程序来分析 tcpdump 捕获的数据包。在我的程序中,我使用 popen 打开一个通往 tcpdump 进程的管道,该进程捕获数据包并将原始数据转储到标准输出,如下所示。

FILE *tcpdump = popen("tcpdump -s0 -w -", "r");

但是,来自 tcpdump 的警告和错误消息会直接发送到 stderr,并显示在控制台中。我想以某种方式隐藏这些,所以只显示我的程序的输出。

我尝试的一种方法是将 2>&1 附加到 tcpdump 命令,但随后我的程序必须区分 tcpdump 警告/错误和原始数据包数据。

是否有一种简单的方法可以使 tcpdump 的 stderr 输出静音?

最佳答案

将 stderr 重定向到/dev/null:

FILE *tcpdump = popen("tcpdump -s0 -w - 2>/dev/null", "r");

2>&1 表示将 stderr 重定向到 stdout,2>file 表示将 stderr 重定向到文件(重定向到/dev/null 本质上会忽略输出)

man bash中查找重定向说明

关于c - 使用 popen 时静默 tcpdump 的输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6754807/

相关文章:

c - *( char** ) 实现什么类型的转换?

Java:类似于 popen() 的函数?

python - communicate() 和 .stdin.write、.stdout.read 或 .stderr.read 之间的区别 - python

c - 在 C 中打开性能

c - 为什么 pclose(3) 不等待 shell 命令终止

powershell - 重定向 powershell 脚本的 stdout 和 stderr 时出错

bash - bash 脚本中 stderr 的临时重定向

c - 二叉树和链表,C中保留头节点

c - 为什么我的 C 编译器没有捕捉到这个越界错误

c++ - 在 malloc() 之后初始化结构体中的 ref-to-ptr