DOS中的非交互式驱动器列表

时间:2014-11-02 04:23:13

标签: c dos djgpp

我尝试使用DJGPP C编译器从DOS中的C程序获取所有可用驱动器的列表(我并不是指Windows命令提示符,我的意思是实际的DOS 6.0)。 / p>

我找不到直接执行此操作的API,因此我只是在驱动器A到Z中循环并尝试测试它们是否在那里。我已尝试使用opendiraccessstatfs进行此测试,但在所有3个测试中,我都会收到以下消息:

Insert diskette for drive B: and press any key when ready

有什么方法可以让我知道我是否可以完全非交互式地从驱动器中读取?如果没有装入磁盘的驱动器存在,我只希望能够表现得好像该驱动器不存在并继续运行。

2 个答案:

答案 0 :(得分:1)

因此,在发布此消息后不久,我发现 实际上是一个API,可以使用setmntentgetmntent直接执行我想要执行的操作。

这是一个代码示例:

FILE *mntentptr = setmntent(NULL, NULL); // this won't segfault as DJGPP ignores both pointers
struct mntent *fsdetails;
while (fsdetails = getmntent(mntentptr)){
    printf("Drive %s is present", fsdetails->mnt_dir);
}

答案 1 :(得分:0)

您需要使用IOCTL Query Logical Drive Map来检查与之关联的逻辑驱动器。我不熟悉如何映射到标准C库调用,但您应该能够通过直接在DOS中的INT调用来完成它。