致命错误:sys / dpli_common.h没有这样的文件

时间:2012-04-13 08:24:57

标签: c

您好我尝试编译此程序:

    #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]);
}

#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:没有这样的文件或目录 编译终止。

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

1 个答案:

答案 0 :(得分:0)

dlpi_ether.h位于同一个地方,系统不会抱怨。

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

如果您在类似操作系统的UNIX下,可以使用以下内容进行查找:

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

根据Oracle的this link,这些头文件似乎根本不在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数据包。