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

致命错误:sys/dpli_common.h没有这样的文件,c,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

嗨,我试着编译这个程序:

    #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]);
}
#包括
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
int fd,状态;
strioctl strcmd结构;
无符号字符地址[6];
fd=打开(argv[1],0,0);
如果(fd==-1){
perror(“enaddr:open”);
出口(1);
}
strcmd.ic_cmd=DLIOCGENADDR;
strcmd.ic_timut=0;
strcmd.ic_len=sizeof(addr);
strcmd.ic_dp=addr;
状态=ioctl(fd、I_STR和strcmd);
如果(状态==-1){
perror(“enaddr:ioctl”);
出口(1);
}
printf(“%02.2x:%02.2x:%02.2x:%02.2x:%02.2x:%02.2x:%02.2x\n”,地址[0],地址[1],地址[2],地址[3],地址[4],地址[5]);
}

终端返回此致命错误:

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

为什么??此库在哪里?

它应该与您的系统不抱怨的
dlpi_ether.h
位于同一位置

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

如果您使用的是类似UNIX的操作系统,您可以使用以下工具进行查找:

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

根据Oracle提供的以下信息,这些头文件可能根本不在Linux中:

Solaris操作系统和Linux之间读取原始以太网的代码有很大不同(libpcap还可用于检查与其他系统(如FreeBSD、HP-UX和AIX)的差异)

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


你确定你的系统上安装了
dlpi
组件吗?我有mint 12,但没有!