我可以获得 DOS 6.22 操作系统的 IP 地址吗?

标签 c sockets dos

我正在使用 DOS 6.22,我需要使用 C 程序提取系统的 IP 地址。

int main()
{
    int n;
    struct ifreq ifr;
    char array[] = "eth0";

    n = socket(AF_INET, SOCK_DGRAM, 0);
    //Type of address to retrieve - IPv4 IP address
    ifr.ifr_addr.sa_family = AF_INET;
    //Copy the interface name in the ifreq structure
    strncpy(ifr.ifr_name , array , IFNAMSIZ - 1);
    ioctl(n, SIOCGIFADDR, &ifr);
    close(n);
    //display result
    printf("IP Address is %s - %s\n" , array , inet_ntoa(( (struct sockaddr_in *)&ifr.ifr_addr )->sin_addr) );
    return 0;
}

但错误的是,即使使用所有头文件,它也无法识别SIOCGIFADDR变量。

DOS支持网络吗?

最佳答案

MS-DOS(我想您与它有关,因为 6.22 是(如果不是)最后发布的版本之一;有很多 DOS)从来没有本地 IP堆。

因此,在 MS-DOS 下没有统一的方法来查询“系统”的 IP(或者事实上,任何与网络相关的事物),因为 MS-DOS 从未内置任何网络,所以作为一个系统,它没有IP地址。也许单个可执行文件构建了以太网,并在其之上构建了 IP 连接,或者可能是驻留的伪驱动程序构建了,但不是操作系统。

这意味着您正在使用 MS-DOS 中存在的数百个第三方 IP 实现之一。您没有告诉我们具体是哪一个,所以我们无法帮助您。

现在,您在编译未定义常量时会遇到错误 - 您可能没有使用正确的#include,或者没有配置编译器来查找正确的 header 目录。

无论如何,我建议您了解一些有关 C 和 MS-DOS 的知识,最重要的是,弄清楚您正在使用哪种 IP 实现,以及从哪里获取相关文档。

关于我可以获得 DOS 6.22 操作系统的 IP 地址吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37363946/

相关文章:

python - 如何从 C 访问 Python 全局变量?

assembly - 我如何在 TASM 中找到文本模式页面缓冲区?

c - 写入 0xb8000000 会在屏幕上产生输出,而无需任何打印语句,例如 `printf`

c++ - 非常奇怪的 C 行为

c - 关于存储持续时间的数组初始化(字符、字符串、其他)的差异

c - 使用 C 对字符串进行数值运算

c# - WCF是建立在套接字上的吗?

sockets - Lambda + API网关: Long executing function return before task finished

c++ - 哪些常见的编程错误会导致在 epoll 边缘触发模式下卡住 CLOSE_WAIT?

c - Phar Lap 汇编程序 : I Need information/documentation and binaries if possible