“pcap\u loop”和“pcap\u dispatch”中的“user”参数是什么?

“pcap\u loop”和“pcap\u dispatch”中的“user”参数是什么?,c,libpcap,C,Libpcap,我用谷歌搜索了很多,但我不知道user参数用于pcap\u loop()。我在网上找到的最好的一本来自斯坦福大学(链接:): /*好的,在这里我们调用pcap\u循环(..)并传入回调函数*/ /*int pcap_循环(pcap_t*p、int cnt、pcap_处理程序回调、u_char*user)*/ /*如果你想知道用户的论点是什么,我也是*/ pcap_循环(descr,atoi(argv[1]),my_回调,NULL); 手册页仅提及一次用户参数(在函数中的实际参数之外): …三个

我用谷歌搜索了很多,但我不知道
user
参数用于
pcap\u loop()
。我在网上找到的最好的一本来自斯坦福大学(链接:):

/*好的,在这里我们调用pcap\u循环(..)并传入回调函数*/
/*int pcap_循环(pcap_t*p、int cnt、pcap_处理程序回调、u_char*user)*/
/*如果你想知道用户的论点是什么,我也是*/
pcap_循环(descr,atoi(argv[1]),my_回调,NULL);
手册页仅提及一次
用户
参数(在函数中的实际参数之外):

…三个参数:在用户参数中传递给pcap_loop()或pcap_dispatch()的u_char指针

我觉得那是毫无帮助的

我可以在调用
pcap\u loop
时传递任何字符串,并在回调处理程序中成功打印出来。这只是调用方将随机字符串传递给处理程序的一种方式吗


有人知道这个参数应该用于什么吗?

是的-这样您就可以从处理程序函数中传入需要访问的任何自定义数据,因此不需要全局变量来完成相同的操作

e、 g

现在在
my\u回调中
您可以访问
something

void my_callback(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) 
{
    struct my_struct *something = (struct my_struct *)user;
    ..
}

(注意,
user
参数最好指定为
void*
,但出于遗留原因,它可能是
u_char*
类型)

它可能是一个不推荐使用的参数,不再使用,但为了向后兼容而保留。@FiddlingBits有意义,但知道它的原意会很有趣。很好的解释,非常感谢。现在我明白了。
struct my_struct something; 
...
pcap_loop(descr,atoi(argv[1]),my_callback, (u_char*)&something);
void my_callback(u_char *user, const struct pcap_pkthdr *h, const u_char *bytes) 
{
    struct my_struct *something = (struct my_struct *)user;
    ..
}