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

在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解析

迷茫
迷茫

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

全部回覆(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

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板