gpt4 book ai didi

c++ - 第二次运行tshark.c源文件后的 fatal error

转载 作者:行者123 更新时间:2023-11-28 04:23:36 24 4
gpt4 key购买 nike

我想从源文件(即用 C 语言编写的 tshark.c)运行 Tshark 解析器,而不是使用终端和以下命令:

tshark -r my.pcap ...

所以我改变了 tshark.c 的主要功能:

int
main(int argc, char *argv[])
{
return real_main(argc, argv);
}

到:

int
tshark_main(char arg0[],char arg1[],char arg2[],char arg3[],char arg4[],char arg5[],char arg6[],char arg7[])
{
int argc=8;
char* const argv[] = {arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7,NULL};
return (real_main(argc, argv));
}

为了从另一个函数调用主函数。之后我创建了一个由 tshark.c 和其他依赖项组成的库,并制作了所需的包含文件,如下所示:

#ifndef __TSHARK_H__
#define __TSHARK_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */

#ifdef _WIN32
int
wmain(int argc, wchar_t *wc_argv[]);
#else
int
tshark_main(char arg0[], char arg1[], char arg2[], char arg3[], char arg4[], char arg5[], char arg6[], char arg7[]);
#endif


#ifdef __cplusplus
}
#endif /* __cplusplus */

#endif /* tshark.h */

在下一步中,我将提到的 lib 和 *.h 文件添加到我的 C++ 项目中,并调用 tshark_main 函数,如下所示:

char arg0[]="";
char arg1[]="-o";
char arg2[]="uat:user_dlts:\"User 0 (DLT=147)\",\"RRC.SI.SIB1\",\"0\",\"\",\"0\",\"\"";
char arg3[]="-r";
char arg4[]="my1.pcap";
char arg5[]="-V";
char arg6[]="";
char arg7[]="";
tshark_main(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7);
char arg4[]="my2.pcap";
tshark_main(arg0,arg1,arg2,arg3,arg4,arg5,arg6,arg7);

但是,在 tshark_main(...) 第二次调用(最后一行)中,出现如下 fatal error :

** (process:8445): ERROR **: 18:05:33.070: file type short name already exists

我认为这个错误是因为在源文件中定义的静态变量,当我第一次调用 tshark_main(...) 时一切正常,当我第二次或多次调用它时,变量已经改变。由于 Wireshark 可以一遍又一遍地剖析数据包和文件,所以我需要一个初始化方法或类似 wireshark 用来重置静态变量的方法,但我不需要知道它在哪里。此外,在第二次调用 tshark_main(...) 之前,可能还有第二种方法可以重置所有内容,我不知道该怎么做。大家能告诉我解决办法吗?

最佳答案

What is the correct invocation?

正确的调用不是尝试运行 main 函数两次,因为它会尝试注册文件类型读取器两次,并给你相关的错误消息。

这与 this ask.wireshark.org 是同一个问题问题,答案是一样的。

关于c++ - 第二次运行tshark.c源文件后的 fatal error ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54947500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com