2

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

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

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

有什么方法可以确定我是否可以完全非交互地从驱动器中读取?如果存在没有加载磁盘的驱动器,我只想能够表现得好像该驱动器不存在并继续。

4

2 回答 2

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);
}
于 2014-11-02T04:36:23.700 回答
0

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

于 2014-11-02T04:37:44.340 回答