Неинтерактивный список дисков в DOS
Я пытаюсь получить список всех доступных дисков из программы на C в DOS (и я не имею в виду командную строку Windows, я имею в виду DOS 6.0), используя компилятор C DJGPP.
Я не могу найти API, чтобы сделать это напрямую, поэтому я просто перебираю диски от A до Z и пытаюсь проверить, есть ли они там. Я пытался сделать этот тест с помощью opendir
, access
а также statfs
, но во всех 3 я получаю сообщения, подобные этому:
Insert diskette for drive B: and press any key when ready
Могу ли я узнать, могу ли я читать с диска совершенно неинтерактивно? Если есть накопитель без загруженного диска, я просто хочу вести себя так, как если бы этот диск не существовал и продолжал.
2 ответа
Итак, вскоре после публикации я обнаружил, что на самом деле есть API, который делает то, что я хочу делать напрямую, используя setmntent и getmntent.
Вот пример кода:
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);
}
Вам нужно использовать IOCTL Query Logical Drive Map, чтобы проверить, с каким логическим диском он связан. Я не знаком с тем, как это сопоставляется со стандартными вызовами библиотеки C, но вы должны быть в состоянии сделать это через вызов INT непосредственно в DOS.