嗨我正在使用c ++和libpcap进行嗅探器,当我按下ctrl + c时,我想停止捕获,这是我的代码:
void Capture::terminate_process(int s){
pcap_breakloop(descr);
pcap_close(descr);
}
void Capture::capturar(){
signal(SIGINT, terminate_process);
pcap_loop (descr, -1, mycallback, NULL);
}
在.h我宣布:
pcap_t *descr;
我已经看到了类似我的问题的类似解决方案:How to use pcap_breakloop? 但我无法编译,我收到此错误:
capture.cpp:138:35:错误:类型'void(Capture::)(int)'的参数与'{aka __sighandler_t void(*)(int)}'不匹配
答案 0 :(得分:3)
signal
需要一个函数指针,您正在使用成员函数指针。只需将Capture::terminate_process(int)
声明为静态:
class Capture {
public:
/* ... */
static void Capture::terminate_process(int s);
/* ... */
};
void Capture::terminate_process(int s){
pcap_breakloop(descr);
pcap_close(descr);
}
/* ... */
signal(SIGINT, &Capture::terminate_process);
您必须对代码进行一些更改,以便不依赖实例变量。