0
已经跟着例子http://www.tcpdump.org/pcap.htm,探索的文件,我看不到有什么我做错了用下面的代码编译器警告libpcap的
// main.c
void got_packet(u_char *args, struct pcap_pkthdr *header, const u_char *packet);
/// ...snip...
void got_packet(u_char *args, struct pcap_pkthdr *header, const u_char *packet) {
printf("Received Packet\n");
}
/// ...snip...
pcap_dispatch(handle, 100, got_packet, NULL);
,以保证我看到了编译器警告:
gcc -g -O3 -I../sensor/ -c -o sensordatad.o sensordatad.c
main.c: In function ‘start_capture’:
main.c:96:27: warning: initialization from incompatible pointer type [enabled by default]
main.c:146:3: warning: passing argument 3 of ‘pcap_dispatch’ from incompatible pointer
type [enabled by default]
这可能是我太过挑剔,看起来像我见过的每一个C代码都有编译时警告的页面,但是我至少要完成这段代码而没有警告!
我也试过这样做,以某种方式类型化函数指针,这是我在任何示例中都没有看到的;但我觉得这值得一试:
pcap_handler callback = &got_packet;
/// ...snip...
pcap_dispatch(handle, 100, &callback, NULL);
这导致了同样令人困惑的错误:
main.c: In function ‘start_capture’:
main.c:96:27: warning: initialization from incompatible pointer type [enabled by default]
这是我第一次在函数指针的特殊Typedef的类型运行,该男子对于pcap_{loop,dispatch}
页上写着:
NAME pcap_loop, pcap_dispatch - process packets from a live capture or savefile
SYNOPSIS #include
typedef void (*pcap_handler)(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes); int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user); int pcap_dispatch(pcap_t *p, int cnt, pcap_handler callback, u_char *user);