linux - 在C中使用Popen调用tshark没有接收到输出
迷茫
迷茫 2017-04-17 14:36:54
0
1
419

在C中使用popen调用tshark,没有返回输出

例子代码如下:

//开启tshark
FILE *fp = popen("tshark -r t_fifo -T pdml", "r");

//读取popen输出
fread(buffer, 1024, 1, fp);

说明:

  1. t_fifo 为创建的FIFO,写入标准PCAP格式报文,用于tshark解析

迷茫
迷茫

业精于勤,荒于嬉;行成于思,毁于随。

Antworte allen(1)
阿神

1 man popen
可以看到
The return value from popen() is a normal standard I/O stream in all respects save that it must be closed with pclose() rather than fclose(3). Writing to

   such a stream writes to the standard input of the command; the command's standard output is the same as that of the process that called popen(), unless this
   is  altered by the command itself.  Conversely, reading from a "popened" stream reads the command's standard output, and the command's standard input is the
   same as that of the process that called popen().

也就是说,其返回值是新进程的STDOUT ; 如果新的进程没有在STDOUT 给出打印,你当然都不到;

2 在linutmint17 中执行
tshark -r t_fifo -T pdml
echo $?
为2;
说明命令不对,并且错误信息被重定向到STDERR了;

如果你向在STDOUT 中获得错误信息,可以使用
tshark -r t_fifo -T pdml 2>&1

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage