免責事項:これは宿題のためのものですが、問題は宿題に関するものではなく、一般的な構文の奇妙さについてです。
はるかに大きなプログラムのコンテキストで libpcap を使用しようとしていますが、各パケットのパケット ヘッダーとデータを取得しようとすると、gcc は pcap_next_ex の 3 番目のパラメーターが互換性のないポインター型であると文句を言います。私が話していることを確認するためのサンプルコードを次に示します。
#include <stdio.h>
#include <stdlib.h>
#include <pcap.h>
int main()
{
pcap_t *pcap;
char pcapErr[PCAP_ERRBUF_SIZE];
struct pcap_pkthdr *pktHeader;
u_char *pktData;
pcap = pcap_open_offline("somefile.pcap", pcapErr);
if (pcap == NULL)
{
fprintf(stderr, "pcap_open_offline failed: %s\n", pcapErr);
exit(EXIT_FAILURE);
}
while (pcap_next_ex(pcap, &pktHeader, &pktData) == 1)
{
// do things here
}
pcap_close(pcap);
return EXIT_SUCCESS;
}
man ページには、pcap_next_ex() のプロトタイプが次のように示されています。
int pcap_next_ex(pcap_t *p, struct pcap_pkthdr **pkt_header, const u_char **pkt_data)
互換性のないポインター型を渡しているのはどのくらい正確ですか? ありがとう。