pcap_findalldevs() 定义在什么文件和行号?我正在 libpcap 源中查找定义 pcap_findalldevs() 的位置。我在 pcap.h 中找到了原型,但完整的功能在哪里定义?
user198736
问问题
722 次
2 回答
1
让我们来看看:
# git clone git://git.debian.org/git/users/rfrancoise/libpcap.git
Cloning into libpcap...
[snap]
# grep -ri pcap_findalldevs libpcap |grep '{'
libpcap/fad-sita.c:int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) {
看来我的幸运日!
这里完整的这个函数的源代码:
int pcap_findalldevs(pcap_if_t **alldevsp, char *errbuf) {
*alldevsp = 0;
strcpy(errbuf, "");
if (acn_parse_hosts_file(errbuf))
{
return -1;
}
if (acn_findalldevs(errbuf))
{
return -1;
}
*alldevsp = acn_if_list;
acn_if_list = 0;
return 0;
}
那么,您的问题的答案是:fad-sita.c!
于 2011-09-14T13:33:23.140 回答
0
它在多个地方定义,因为它的完成方式取决于您运行的操作系统。在带有 WinPcap 的 Windows 上,它定义在fad-win32.c
; 在具有 的 UN*Xes 上getifaddrs()
,它定义在fad-getad.c
; 在 Solaris 8 或更高版本上,它定义在fad-glifc.c
; 在支持本地接口上的数据包捕获的其他 UN*Xes 上,它定义在fad-gifc.c
; 在根本不支持数据包捕获的 UN*Xes 上,它被定义为(不返回任何接口)fad-null.c
;并且,如果配置和构建 libpcap 的人碰巧配置为支持从SITA提供的远程设备捕获,则它在fad-sita.c
.
(是的,另一个答案是错误的;他们不应该假设我们这些在 libpcap 中编写代码的人都喜欢将函数的左大括号放在与函数名称相同的行上——我不这样做,而且不会,那样做。)
于 2011-10-19T08:42:35.297 回答