`pcap_loop` 和 `pcap_dispatch` 中的 `user` 参数是什么?
What is the `user` parameter in `pcap_loop` and `pcap_dispatch`?
我有 Google 这一堆,但我不知道 user
参数是什么 pcap_loop()
。我在网上找到的最好的一篇来自斯坦福 (link: http://yuba.stanford.edu/~casado/pcap/section3.html):
/* allright here we call pcap_loop(..) and pass in our callback function */
/* int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)*/
/* <b>If you are wondering what the user argument is all about, so am I!!</b> */
pcap_loop(descr,atoi(argv[1]),my_callback,NULL);
联机帮助页仅提及一次 user
参数(在函数中的实际参数之外):
...three arguments: a u_char pointer which is passed in the user argument to pcap_loop() or pcap_dispatch()...
我觉得这没什么用。
我可以在 pcap_loop
的调用中传递任何字符串,并在回调处理程序中成功打印出来。这是否只是调用者可以将随机字符串传递给处理程序的一种方式?
有人知道这个参数的用途吗?
是的 - 这样您就可以从处理程序函数中传入您需要访问的任何自定义数据,因此您不需要全局变量来完成相同的操作。
例如
struct my_struct something;
...
pcap_loop(descr,atoi(argv[1]),my_callback, (u_char*)&something);
现在 my_callback
您可以访问 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*
类型)
我有 Google 这一堆,但我不知道 user
参数是什么 pcap_loop()
。我在网上找到的最好的一篇来自斯坦福 (link: http://yuba.stanford.edu/~casado/pcap/section3.html):
/* allright here we call pcap_loop(..) and pass in our callback function */
/* int pcap_loop(pcap_t *p, int cnt, pcap_handler callback, u_char *user)*/
/* <b>If you are wondering what the user argument is all about, so am I!!</b> */
pcap_loop(descr,atoi(argv[1]),my_callback,NULL);
联机帮助页仅提及一次 user
参数(在函数中的实际参数之外):
...three arguments: a u_char pointer which is passed in the user argument to pcap_loop() or pcap_dispatch()...
我觉得这没什么用。
我可以在 pcap_loop
的调用中传递任何字符串,并在回调处理程序中成功打印出来。这是否只是调用者可以将随机字符串传递给处理程序的一种方式?
有人知道这个参数的用途吗?
是的 - 这样您就可以从处理程序函数中传入您需要访问的任何自定义数据,因此您不需要全局变量来完成相同的操作。
例如
struct my_struct something;
...
pcap_loop(descr,atoi(argv[1]),my_callback, (u_char*)&something);
现在 my_callback
您可以访问 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*
类型)