【问题标题】:fatal error: sys/dpli_common.h no such file致命错误:sys/dpli_common.h 没有这样的文件
【发布时间】:2023-03-25 06:24:02
【问题描述】:

您好,我尝试编译这个程序:

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

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

【问题讨论】:

  • 您确定您的系统上安装了dlpi 组件吗?

标签: c


【解决方案1】:

应该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 数据包。

【讨论】:

  • 我有 mint 12 但我没有这个!
猜你喜欢
  • 2016-06-19
  • 2019-03-07
  • 1970-01-01
  • 1970-01-01
  • 2017-05-09
  • 2021-05-15
  • 2014-10-31
  • 2022-01-11
  • 2021-09-19
相关资源
最近更新 更多