代码之家  ›  专栏  ›  技术社区  ›  Greg Schmit

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

  •  1
  • Greg Schmit  · 技术社区  · 7 年前

    user 参数用于 pcap_loop() . 我在网上找到的最好的是斯坦福大学(链接: 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)*/
        /* If you are wondering what the user argument is all about, so am I!!   */
        pcap_loop(descr,atoi(argv[1]),my_callback,NULL);
    

    手册页只提到 参数一次(在函数中的实际参数之外):

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

    我觉得那是毫无帮助的。

    我可以在调用 pcap_loop 并在回调处理程序中成功打印出来。这只是调用方将随机字符串传递给处理程序的一种方式吗?

    1 回复  |  直到 7 年前
        1
  •  3
  •   nos    7 年前

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

    例如

    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* 类型(由于遗留原因)