0

嗨我尝试编译这个程序:

    #include <sys/types.h>
   #include <sys/dlpi_ether.h>
   #include <sys/dlpi_common.h>
   #include <stropts.h>
   #include <unistd.h>

    int main(int argc,char *argv[])
{
    int fd, status;
    struct strioctl strcmd;
    unsigned char addr[6];
            fd = open(argv[1],0,0);
    if (fd == -1) {
        perror("enaddr: open");
        exit(1);
    }

    strcmd.ic_cmd = DLIOCGENADDR;
    strcmd.ic_timout = 0;
    strcmd.ic_len = sizeof(addr);
    strcmd.ic_dp = addr;

    status = ioctl(fd,I_STR,&strcmd);
    if (status == -1) {
        perror("enaddr: ioctl");
        exit(1);
    }

    printf("%02.2x:%02.2x:%02.2x:%02.2x:%02.2x:%02.2x\n",addr[0],addr[1],addr[2],addr[3],addr[4],addr[5]);
}

终端返回这个致命错误:

prova.c:3:30:致命错误:sys/dlpi_common.h:没有此类文件或目录编译终止。

为什么?这个图书馆在哪里?

4

1 回答 1

0

应该dlpi_ether.h与您的系统没有抱怨的位置相同。

这不是一个真正的 C 问题,因为它在很大程度上取决于您正在工作的环境,而不是 C 本身。我们只能说你没有那个头文件。

如果您在类似 UNIX 的操作系统下,您可以通过以下方式查找它:

find /usr/include -name 'dlpi*.h'

根据Oracle的链接,这些头文件似乎根本不在 Linux 中:

Solaris OS 和 Linux 之间读取原始以太网的代码完全不同(libpcap 也可用于检查与其他系统的差异,例如 FreeBSD、HP-UX 和 AIX)。

libpcap 中的适用代码位于 pcap-linux.c 和 pcap-dlpi.c。DLPI 代码用于 Solaris、HP-UX、AIX 和其他操作系统。Linux 提供了一种通过标准套接字调用读取原始套接字数据包的机制。Solaris OS 使用 getmsg(2) 和 putmsg(2) 调用来接收和发送 DLPI 数据包。

于 2012-04-13T08:30:39.893 回答