libpcapと小さな C プログラムでいくつかのテストを行いたいので、main() から got_packet() に構造体を渡そうとしています。libpcap チュートリアルを読んだ後、私はこれを見つけました:
pcap_loop() のプロトタイプは次のとおりです。
int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)
最後の引数は一部のアプリケーションで役立ちますが、多くの場合、単純に NULL に設定されます。pcap_loop() が送信する引数に加えて、コールバック関数に送信したい独自の引数があるとします。これが私たちが行う場所です。明らかに、結果が正しくそこに到達するようにするには、u_char ポインターに型キャストする必要があります。後で説明するように、pcap は u_char ポインターの形式で情報を渡す非常に興味深い手段を利用します。
これによると、pcap_loop() の引数番号 4 を使用して、got_packet() で構造体を送信することが可能です。しかし、試した後、エラーが発生します。
ここに私の(バグのある)コードがあります:
int main(int argc, char **argv)
{
/* some line of code, not important */
/* def. of the structure: */
typedef struct _configuration Configuration;
struct _configuration {
int id;
char title[255];
};
/* init. of the structure: */
Configuration conf[2] = {
{0, "foo"},
{1, "bar"}};
/* use pcap_loop with got_packet callback: */
pcap_loop(handle, num_packets, got_packet, &conf);
}
void got_packet(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
/* this line don't work: */
printf("test: %d\n", *args[0]->id);
}
いくつかのテストの後、この種のエラーが発生します。
gcc -c got_packet.c -o got_packet.o
got_packet.c: In function ‘got_packet’:
got_packet.c:25: error: invalid type argument of ‘->’
got_packet() 関数でconf (構成構造の配列)を渡すためにこのコードを編集する方法がわかりますか?
助けてくれてありがとう。
よろしく