我正在使用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是否支持网络?
答案 0 :(得分:3)
MS-DOS(我认为你与之相关,因为6.22是(如果不是)最后一个版本的发布之一;那些很多的DOSs)从来没有本机IP堆栈。
因此,没有统一查询系统"系统的方法" (或者实际上,任何与网络相关的东西)在MS-DOS下,因为MS-DOS从来没有内置任何网络,所以作为一个系统,它没有IP地址。也许一个可执行文件构建了一个以太网,其中包括IP连接,或者可能是常驻伪驱动程序,但不是操作系统。
这意味着您正在使用MS-DOS中存在的数百个第三方IP实现之一。你没有告诉我们哪个,所以我们无法帮助你。
现在,在编译未定义的常量时会出现错误 - 您可能没有使用正确的#include
,或者没有配置您的编译器来查找正确的头文件目录。< / p>
无论如何,我建议你对C和MS-DOS有所了解,最重要的是,要弄清楚你正在使用哪种IP实现,以及从哪里获取文档。
答案 1 :(得分:2)
我相当确定DOS本身不支持IP网络。如果我没记错的话(这些东西很多多年前,所以我可能记错了)当天有一些TCP / IP堆可用于DOS - 也许你可以挖掘其中一些并使用它们。
但实际上,为什么你在2016年使用这样的过时操作系统呢?